gpt4 book ai didi

java - 如何处理 JMS 中的消息顺序?

转载 作者:IT老高 更新时间:2023-10-28 20:34:24 26 4
gpt4 key购买 nike

我正在审查一个用 Java 编写的客户端-服务器应用程序。服务器接收 JMS 消息并对其进行处理,但消息可能以意外的顺序出现,并且取消可能在订单消息之前到达。你如何处理这样的情况?你是在mdb里做的吗?

这种场景有哪些策略或模式?

最佳答案

到目前为止,我知道,这被称为“无序”交付,是 JMS 系统的服务质量 (QoS) 属性的一部分。我不认为它是 JMS 规范的一部分,但一些提供商可能支持它。这取决于您使用的特定 JMS 实现。

但是请注意,JMS 旨在以一种分配负载的方式将消息分发给几个消费者。如果消息必须以有序的方式传递,这是不可能的——它基本上会导致消息传递的序列化,并且消息无法同时处理。

wikipedia说得比我好:

JMS queue A staging area that contains messages that have been sent and are waiting to be read. Note that, contrary to what the name queue suggests, messages don't have to be delivered in the order sent. If the message driven bean pool contains more than one instance then messages can be processed concurrently and thus it is possible that a later message is processed sooner than an earlier one. A JMS queue guarantees only that each message is processed only once.

那么,使用 JMS 来实现带外取消请求并不容易。两个想法:

  • 在数据库中存储与每条消息对应的票证,可用于轻松取消消息。当消息被传递时,MDB 会检查相应的票证是否仍然有效。如果是,则继续,如果不是,则丢弃该消息。
  • 尝试将 MDB 池大小设置为 1。也许在这种情况下,将订购交货。更改池大小是应用程序。特定于服务器,但大多数都支持每个 bean 池大小。

否则,请查看 message store图案。无论如何值得检查 EAI网站。

关于java - 如何处理 JMS 中的消息顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2252085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com