连接到 ActiveMQ 时向消费者发送消息
我有多个连接到队列的工作程序实例,所有请求都将以负载平衡的方式分发到工作程序实例。当一个新的工作实例连接到队列时,我应该将一小部分数据从主流应用程序转储到这个新的工作实例(一次性作业)。
目前,我正在使用主流应用程序中的 REST 端点在应用程序启动时执行此操作,但我们可以利用消息队列来实现此目的吗?一旦新的worker实例连接到队列,它会通过队列向主流应用程序请求初始数据转储,然后应用程序将回复初始数据。
是否可以使用消息队列/主题?请分享您使用 activemq 实现这一目标的观点/建议
I have multiple instances of a worker connected to a queue and all requests will be distributed to worker instances in a load balanced way. When a new worker instance is connected to the queue, I should dump a small data from mainstream app to this new worker instance (one time job).
Currently I'm using REST endpoint from mainstream app for doing this at application start-up but can we leverage the messaging queue for this? Once a new worker instance connected to queue, it will ask the initial data dump to mainstream app through queue and then app will reply with initial data.
Is it possible using messaging queue/topic? Kindly share your views/suggestions to achieve this using activemq
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您使用的是 ActiveMQ Artemis,这种要求通常可以通过支持 非破坏性 和 最后一个值 语义。最后值语义允许队列保持最新消息的最新状态,而非破坏性语义意味着即使消费者确认消息,它们也将保留在队列中以供下一个连接的客户端使用。使用此组合时,客户端可以首先使用此特殊“初始化”队列中的所有消息,然后继续执行他们需要执行的任何其他消息传递工作。
不幸的是,ActiveMQ“经典”不支持这些语义中的任何一个,并且没有直接的方法来获得等效的行为。
If you're using ActiveMQ Artemis this kind of requirement is typically fulfilled with a queue that supports both non-destructive and last-value semantics. The last-value semantics allows the queue to stay up-to-date with the latest messages and the non-destructive semantics means that even when consumers acknowledge the messages they will remain on the queue for the next client which connects. When using this combination clients can first consume all the messages from this special "initialization" queue and then continue on with whatever other messaging work they need to do.
Unfortunately ActiveMQ "Classic" doesn't support either of these semantics and there is no straight-forward way to get equivalent behavior.