主题上的主题订阅者行为,用于长时间运行的主题的主题

时间:2015-10-06 12:01:28

标签: jms spring-jms jms-topic

我有Spring DMLC形式的主题和相应的订阅者。我的问题与以下情况有关:

在主题上发布消息,订阅者开始处理消息。如果在处理上一条消息时有另一条消息到达此主题,假设订户忙或在处理上一条消息后将处理此消息,新消息是否会丢失。

如果答案是在第一条消息之后将处理第二条消息,则后续问题是代理是处理此行为还是处理此行为的订户。

2 个答案:

答案 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