如何在现实世界的 JMS 分布式架构中利用 Spring Integration?
对于以下场景,我正在寻求您有关最佳实践的建议和提示:
在分布式(主要基于 Java)系统中,具有:
- 许多(不同的)客户端应用程序(Web 应用程序、命令行工具、REST API)
- 中央 JMS消息代理(目前支持使用 ActiveMQ)
- 多个独立处理节点(在多台远程计算机上运行,计算由 JMS 消息有效负载指定的不同类型的昂贵操作)
如何最好地应用 Spring Integration 框架将客户端与工作节点解耦?当阅读参考文档和一些最初的实验时,看起来 JMS 入站适配器的配置本质上需要使用订阅者,而在解耦场景中不存在订阅者。
小旁注:通信应通过 JMS 文本消息进行(使用 JSON 数据结构以实现未来的可扩展性)。
For the following scenario I am looking for your advices and tips on best practices:
In a distributed (mainly Java-based) system with:
- many (different) client applications (web-app, command-line tools, REST API)
- a central JMS message broker (currently in favor of using ActiveMQ)
- multiple stand-alone processing nodes (running on multiple remote machines, computing expensive operations of different types as specified by the JMS message payload)
How would one best apply the JMS support provided by the Spring Integration framework to decouple the clients from the worker nodes? When reading through the reference documentation and some very first experiments it looks like the configuration of an JMS inbound adapter inherently require to use a subscriber, which in a decoupled scenario does not exist.
Small side note: communication should happen via JMS text messages (using a JSON data structure for future extensibility).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这并不能真正回答您的问题,但请确保您研究 Apache Camel 来连接不同的组件。我发现它对于将 JMS 队列连接到现有 Web 服务非常有用,并计划也将其用于其他组件。
一个监视 ActiveMQ 队列中的消息、转换它们并将它们发布到 Web 服务的示例:
这就是我们的 Spring 应用程序中启动 Camel 并开始处理消息所需的全部内容。
This doesn't really answer your question, but make sure you look into Apache Camel for connecting your different components. I found it extremely useful for connecting a JMS queue up to an existing web service and plan to use it for other components also.
An example that monitors an ActiveMQ queue for messages, transforms them, and posts them to a web service:
That's all that's necessary in our Spring application to fire up Camel and start processing messages.
这是我今天提出的 Spring Integration,如果您发现可以改进的地方,请跟进。
在客户端,消息可以通过 SimpleMessagingGateway 发送和接收:
处理节点端的配置如下所示(请参阅内联注释以获取 Spring Integration 元素的更多说明):
Here is the Spring Integration I was coming up with today, if you find things which could be improved please follow up.
On the client side the messages can be send out and received through a SimpleMessagingGateway:
And the configuration on the processing node side looks like (please see the comments inline for more explanation of the Spring Integration elements):
您是否询问 Spring Integration 是否可以用于实现协议 桥接?那么答案是肯定的,而且非常简单。
Are you asking if Spring Integration can be used to implement a protocol bridge? Then the answer is yes, and does so quite simply.