当前位置: 首页 > 面试题库 >

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

韦知
2023-03-14
问题内容

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

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

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

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

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


问题答案:

这并不能真正回答您的问题,但是请确保您使用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并开始处理消息所必需的。



 类似资料:
  • 目前在我们的项目中,我们以以下方式实现了分层架构,其中控制器、服务、存储库被放置在每个特性的相同包中,例如: null null

  • 分离协同组件有个很多重要的优势。第一,它允许组件被独立的设计和实现。比如一个独立的组件能多个应用共享。第二,它使得一个系统架构师在协同部分的论证更加简单,当然这不是重点(至少在本书不是)。最后,它能使得一个系统能够将允许和管理协同组件分开。分开运行一个这样的组件能够简化产品中解决问题的任务。 软件组件运行在操作系统的进程中,大部分情况下是以多线程执行的。因此,Zookeeper服务器和客户端都是经

  • 我正在读clean architecture的书,我想把它应用到我写的一些软件中。在该软件中,和等实体扮演着非常重要的角色。出于这个原因,为了避免重复,跨代码共享这些实体是有意义的,但这也违反了清洁体系结构的规则。 在这种情况下,什么是正确的决定?我应该在中添加一个“shared/entities”文件夹吗? 我正在做的项目主要是在flutter编程,如果这对答案很重要的话。

  • Ceph 独一无二地用统一的系统提供了对象、块、和文件存储功能,它可靠性高、管理简便、并且是自由软件。 Ceph 的强大足以改变贵公司的 IT 基础架构、和管理海量数据的能力。Ceph 可提供极大的伸缩性——供成千用户访问 PB 乃至 EB 级的数据。 Ceph 节点以普通硬件和智能守护进程作为支撑点, Ceph 存储集群组织起了大量节点,它们之间靠相互通讯来复制数据、并动态地重分布数据。 Cep

  • 我是WPF和MVVM的新手。这是我通常为ASP.NET应用程序设置体系结构的方式: 数据层 我通常使用ORM工具将数据持久化到数据库中。 业务层 这包括我所有的商业模式和商业逻辑。 服务层 这一层用作进入后端系统的入口点。(有时通过周转基金)。这一层负责将业务模型转换为视图模型。 表示层 这一层用于表示逻辑。 我知道MVVM的视图是.xaml文件并驻留在WPF应用程序中。但是,我对“模型”和“Vi

  • 我已经阅读了一些关于keydove-spring实现的文章(例如:使用keydove轻松保护您的Spring Boot应用程序),但没有人提到如何使用JWT。 我已经创建了zuul api网关,并添加了KeyCloak适配器,如前面链接的文章所述。没关系,但是我想用JWT和钥匙斗篷。 如前所述,将客户端访问类型设置为仅承载,将会话策略设置为NullAuthenticatedSessionStrat