长时间 运行 过程中关于一个主题的多条消息期间的主题订阅者行为
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
我有一个主题和相应的订阅者,格式为 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