长时间 运行 过程中关于一个主题的多条消息期间的主题订阅者行为

topic subscriber behaviour during multiple messages on a topic for long running process

我有一个主题和相应的订阅者,格式为 Spring DMLC。我的问题与以下场景有关:

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

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

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

这(消息处理)在经纪人的控制之下,而不是客户;订阅是否持久取决于客户端。

一些代理提供预取功能,在这种情况下,消息可能会在客户端仍在处理当前消息时发送给客户端,但如果客户端死亡,消息仍然不会丢失,因为消息仅在已确认。

Is the second message will be processed after the first message ?

Is this behaviour handled by the broker or subscriber has to handle this ?

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

另外请注意,有 2 种类型的 JMS 主题订阅者:

(1) 非持久订阅者: Broker 仅在订阅者处于活动状态时才保留副本(在内存中)。

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

请查找以下 oracle 文档:

To ensure that a pub/sub application receives all published messages, use PERSISTENT delivery mode for the publishers. In addition, use durable subscriptions for the subscribers.

The Session.createConsumer method creates a nondurable subscriber if a topic is specified as the destination. A nondurable subscriber can receive only messages that are published while it is active.

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