一尘不染

如何在实际的JMS分布式体系结构中利用Spring Integration?

java

对于以下情况,我正在寻找您的建议和最佳实践提示:

在具有以下功能的分布式(主要是基于Java的)系统中:

  • 许多(不同的)客户端应用程序(Web应用程序,命令行工具,REST API)
  • 中央JMS消息代理(当前赞成使用ActiveMQ)
  • 多个独立处理节点(在多个远程计算机上运行,​​计算JMS消息有效负载指定的不同类型的昂贵操作)

如何最好地应用Spring Integration框架提供的JMS支持来将客户端与工作节点分离开?在阅读参考文档和一些最初的实验时,看起来JMS入站适配器的配置本质上要求使用订户,而在分离的情况下则不存在。

小附注:通信应通过JMS文本消息进行(使用JSON数据结构以备将来扩展)。


阅读 186

收藏
2020-12-03

共1个答案

一尘不染

这并不能真正回答您的问题,但是请确保您使用Apache
Camel
连接不同的组件。我发现将JMS队列连接到现有Web服务并计划将其用于其他组件非常有用。

监视ActiveMQ队列中的消息,对其进行转换并将其发布到Web服务的示例:

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:camel="http://camel.apache.org/schema/spring"
   xsi:schemaLocation="
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
      http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring-2.3.0.xsd">

<bean id="callbackProcessor" class="com.package.CallbackProcessor"/>

<bean id="activemq" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory" ref="jmsFactory" />
</bean>

<camel:camelContext id="camel">
    <!-- Must put this in camel:endpoint because camel:from doesn't support property substitution -->
    <camel:endpoint id="callbackQueue" uri="activemq:queue:${jms.callback-queue-name}"/>
    <camel:route>
        <camel:from ref="callbackQueue"/>
        <camel:process ref="callbackProcessor"/>
        <camel:to uri="http://dummy"/><!-- This will be replaced by the callbackProcessor with the callback URL in the message -->
    </camel:route>
</camel:camelContext>
</beans>

这是我们Spring应用程序中启动Camel并开始处理消息所必需的。

2020-12-03