在长时间运行过程的主题上的多个消息期间的主题订阅者行为

问题描述:

我有一个Spring DMLC形式的主题和相应的订阅者。我的问题与以下情况有关:在长时间运行过程的主题上的多个消息期间的主题订阅者行为

在主题上发布消息并且订阅者开始处理消息。如果在处理上一条消息时另一条消息到达此主题,则假设订阅者处于忙碌状态,或者处理上一条消息之后将处理此消息,新消息是否会丢失。

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

除非客户取消订阅(或死亡),否则下一条消息不会丢失 - 您可以使订阅持久化,这意味着即使在这种情况下消息也不会丢失。

这(消息处理)是在代理的控制下,而不是客户端;订阅是否耐用取决于客户端。

一些经纪人提供的预取功能,在这种情况下,消息可能,同时它还是处理当前一个被发送到客户端,但它仍然不会丢失,如果客户死亡,因为只有在它被删除的消息被承认。

第二条消息是否会在第一条消息之后被处理?

这种行为是由经纪人或用户处理必须处理 呢?

消息的副本将由代理保存,即代理处理此消息。

也只是需要注意的是,有2种类型的JMS主题订阅者:

(1)非持久订阅者:经纪人保留复制(在内存中)只有当用户处于Active状态。

(2)持久订阅者:即使用户未处于活动状态,代理也会保留副本(在内存+文件系统中)。

请找到以下Oracle文档:

为了确保发布/订阅应用程序接收所有发布的消息, 使用持久传递模式的出版商。另外,为用户使用 持久订阅。

如果将 主题指定为目标,则Session.createConsumer方法会创建非持久订阅者。非持久订户可以仅接收在其处于活动状态时发布的消息。

https://docs.oracle.com/cd/E19798-01/821-1841/bncgd/index.html