我有一个Spring应用程序,它将JSON消息推送到队列中,而在另一个地方,它使用@JmsListener来使用那些JSON消息。然后通过HTTP请求发送这些消息。响应代码可能是200,这是可以的,但我想处理当客户端关闭时的情况,或者只是响应代码与200不同。
有什么机制可以用来重试消息吗?也许我可以在队列结束时回推消息,然后重试3次吗?在消息实际退出队列后,是否有任何内部ActiveMQ机制来执行此操作?
发布于 2022-02-14 15:07:19
听起来你在寻找消费者和HTTP之间的事务。在代码调用session.commit()之前,JMS不会确认队列中的消息。然后,您可以调用一个HTTP端点,并维护合理的事务和单个消息传递的服务质量。
使此自我恢复的关键是检测无效的消息有效负载(即坏JSON格式或坏数据),并将这些消息移动到DLQ中。
考虑添加JMS事务支持,而不是使用AUTO_ACKNOWLEDGE
connection.createSession(true, Session.SESSION_TRANSACTED);然后在你的psuedo代码中:
Message message = session.receive ..
.. do valid message checks
.. call HTTP endpoint..
// now take action based on HTTP return code
switch(httpReturnCode)
case 200:
session.commit();
case .. invalid message returned from HTTP:
.. produce message to DLQ for inspection
session.commit();
case .. http not available..:
.. do some time delay, retry to http endpointhttps://stackoverflow.com/questions/71111951
复制相似问题