我有Spring DMLC形式的主题和相应的订阅者。我的问题与以下情况有关:
在主题上发布消息,订阅者开始处理消息。如果在处理上一条消息时有另一条消息到达此主题,假设订户忙或在处理上一条消息后将处理此消息,新消息是否会丢失。
如果答案是在第一条消息之后将处理第二条消息,则后续问题是代理是处理此行为还是处理此行为的订户。
答案 0 :(得分:1)
除非客户端取消订阅(或死亡),否则下一条消息不会丢失 - 您可以使订阅持久,这意味着即使在这种情况下也不会丢失消息。
这(消息处理)在经纪人的控制下,而不是客户;订阅是否持久取决于客户。
某些代理提供预取功能,在这种情况下,消息可能会在客户端处理当前消息时发送给客户端,但如果客户端死亡,消息仍然不会丢失,因为消息仅在消息被删除后才会被删除确认。
答案 1 :(得分:1)
第一条消息后是否会处理第二条消息?
是强>
代理或订阅者处理此行为是否必须处理 这个?
经纪人将保留邮件的副本,即经纪人处理此邮件。
另外需要注意的是,有两种类型的JMS主题订阅者:
(1)非持久订阅者仅当订阅者处于活动状态时,代理才会保留副本(在内存中)。
(2)持久订阅者即使订阅者处于非活动状态,代理也会保留副本(在内存+文件系统中)。
请查看以下oracle文档:
要确保pub / sub应用程序接收所有已发布的消息, 为发布商使用PERSISTENT投放模式。另外,使用 订阅者的持久订阅。
如果是,Session.createConsumer方法会创建一个非持久订阅者 主题被指定为目标。非耐用用户可以 仅接收在活动时发布的消息。
https://docs.oracle.com/cd/E19798-01/821-1841/bncgd/index.html