有时有必要将不同的Message Broker连接在一起。 在企业消息传递中,此方案称为桥接。 可以使用JMS和其他协议(例如AMQP,ActiveMQ Artemis核心协议)来完成。 该博客文章重点介绍在WildFly中运行的JMS与两个Apache ActiveMQ Artemis Brokers的桥接。
什么是JMS桥?
JMS桥通常用于连接不同代理或服务器上的队列和主题。 桥将消息从源转发到目标代理,而两个代理不必位于同一群集中。
这使得桥接适合于将消息从一个群集可靠地发送到另一个群集(例如,通过WAN),并且连接可能不可靠。 它也可以像HiveMQ一样用于Message Broker的水平扩展。
横向桥接方案
有两种不同的部署方案。 在此博客文章中,我将使用源代理在WildFly中配置网桥。 也可以在两个Broker的中间使用一个额外的ActiveMQ Broker作为Bridge。
上图显示了我们要配置的方案。 如您所见,我们需要在源Broker上配置一个队列,在目标Broker上配置一个队列,并且需要一些配置以连接这两个队列。
注意:
我没有找到更好的设备图像。 因此,我选择了iPhone图像。 随意可视化其他内容;-)
配置源代理
第一步,您必须为源和目标分别
下载
和解压缩WildFly服务器两次,如上图所示。
在下一步中,您必须配置源WildFly的
standalone-full.xml
,该文件位于WildFly的
standalone / configuration
文件夹中。
打开XML文件后,您必须通过将以下代码段添加到standalone-full.xml中,来将Source Queue添加到Source Broker中:
此代码片段创建一个名为JMSBridgeSourceQueue的新JMS队列。 在下一步中,您必须配置网桥。 桥具有许多配置选项,例如最大批处理时间,最大重试次数等。 这不是本文的一部分。
要启动和运行网桥的下一个更重要的配置是指向先前创建的jms-queue的源标记和包含目标代理的目标队列的配置的目标标记。
如您所见,目标代理需要身份验证,因此需要在目标代理上创建应用程序用户。
配置目标代理
配置源代理后,必须配置目标代理。 如前所述,JMS Bridge需要一个应用程序用户,该应用程序用户必须添加到目标代理中,并在源代理standalone-full.xml文件中引用。
可以使用
位于以下位置的
add-user.sh
脚本
bin
文件夹。
在最后一步中,您还必须配置目标代理的standalone-full.xml文件。
您必须创建一个与soure Brokers Bridge配置的目标名称相同的JMS队列。 而已。 在最后一步中,您可以启动两个服务器并检查日志文件。 如果两个WildFlies都成功启动且没有任何错误,则表明Bridge已启动并正在运行。
启动经纪人
./standalone.sh -Djboss.socket.binding.port-offset=100 -c standalone-full.xml
./standalone.sh -c standalone-full.xml
可以使用许多属性来配置JMS Bridge。 服务质量,最大批处理时间和最大批处理大小的最大重试次数以及失败重试间隔时间。
玩转您的JMS Bridge!
翻译自:
https://www.javacodegeeks.com/2016/11/building-horizontal-jms-bridge-two-wildfly-servers-using-activemq-artemis.html
有时有必要将不同的Message Broker连接在一起。 在企业消息传递中,此方案称为桥接。 可以使用JMS和其他协议(例如AMQP,ActiveMQ Artemis核心协议)来完成。 该博客文章重点介绍在WildFly中运行的JMS与两个Apache ActiveMQ Artemis Brokers的桥接。 什么是JMS桥? JMS桥通常用于连接不同代理或服务器上的队列和主题。 桥将...
存放必要的资料的存储库,以将
ActiveMQ
Artemis
与
WildFly
集成。
这些测试依赖于
ActiveMQ
Artemis
集成测试test-jar。 该测试jar当前未作为
ActiveMQ
Artemis
的一部分发布。 因此,您必须签出
ActiveMQ
Artemis
源并在本地
构建
。 去做这个:
git clone https://github.com/apache/
activemq
-
artemis
cd
activemq
-
artemis
mvn clean install
一旦
activemq
Artemis
的
构建
完成,就会将适当的jar添加到您的本地.m2目录中,并且您可以从
artemis
-
wildfly
-integration目录运行测试:
mvn clean test
ActiveMQ
的作用、原理是啥?
ActiveMQ
的作用就是实现跨网络的习性与系统剑通信,可以将业务解耦,提供异步消息支持,增加系统并发量.比如原本执行一个操作需要1s,那么用户请求后必须等待1s之后才会得到响应,引入MQ之后,我们可以仅仅只做简单的校验流程,确认该操作可以执行时,将消耗的操作
使用
异步消息通知,并直接返回用户操作成功,而专门处理该业务的服务者监听该消息,一旦有消息之后就开始处理,用户只需要等待10ms
原理就是生产者将消息发送给
ActiveMQ
服务端,服务端会根据该消息对应的目标模型(p
说到Ibm mq消息
队列
,我想用过WebSphere服务器的人都不陌生,也能很熟练的在Was上配置一个
队列
服务,但是如何在
Wildfly
(Jboss前身)上配置Ibm mq的消息
队列
,网上给的资料也少,笔者了解过
Wildfly
内置的消息中间件是Hornetq,要想在
Wildfly
应用服务器上
使用
mq消息中间件,那还得做些配置,下面笔者来介绍下如何在
Wildfly
上搭建ibm mq消息
队列
。
使用
artemis
版本MQ。Spring
JMS
使用
springframework-mvc架构,传统xml配置,部署到tomcat运行。如果采用springboot将更简单。有空将更新成springboot
ActiveMQ
基本安装与
使用
注:
ActiveMQ
下载的
artemis
版本,与之前的
ActiveMQ
版本有点区别,
下载
ActiveMQ
下载地址 https://activem...
Spring Boot
Artemis
集群主题
一个示例项目,通过集群模式下的topic (发布-订阅),通过Apache
ActiveMQ
Artemis
2.4.0演示了
两个
Spring Boot应用程序生产者和
使用
者之间的异步通信。
Apache
ActiveMQ
Artemis
是
ActiveMQ
/ HornetQ / Apollo的组合功能集。 它提供了一种非阻塞的体系结构,以实现出色的性能。
项目配置为在local mode (嵌入式服务器)和clustered mode (不同的节点)上运行。
Java
8
Maven的3
Sprint Boot:1.5.9.RELEASE
Apache
Artemis
2.4.0
[可选]在Local模式下运行项目
${project-home} $ mvn clean package
${topic-produc
Artemis
有个很好的设计,就是程序和数据分离。我们解压后的
ARTEMIS
_HOME是程序目录,要启动
Artemis
服务还需要创建一个数据目录,我们把数据目录设定在一个项目下的
jms
-data目录下。执行命令:
artemis
create
jms
-data --user admin --password admin,我这里把user和password都设为admin.
(1)解压:tar -zvxf apache-
artemis
-2.13.0
(2)创建broker:./apache-
artemis
-2.13.0/bin/
artemis
create broker
本文将从多个维度综合对比Kafka、RabbitMQ、RocketMQ、
ActiveMQ
这4款当前最主流的MQ消息中间件产品,希望能为您的下一次产品的架构设计和MQ消息中间件选型提供参考依据。
RabbitMQ
ActiveMQ
Kafka
RocketMQ
资料数量多
资料数量多
资料数量中等
资料数量少,建议去官网上看
可以
使用
Python
的 stomp 库来连接
ActiveMQ
,具体步骤如下:
1. 安装 stomp 库:在命令行中输入 pip install stomp 即可安装。
2. 导入 stomp 库:在
Python
代码中导入 stomp 库,例如 import stomp。
3. 创建连接:
使用
stomp.Connection() 方法创建连接,指定
ActiveMQ
的 IP 地址和端口号。
4. 连接认证:如果
ActiveMQ
配置了用户名和密码,需要
使用
connect() 方法进行认证。
5. 发送消息:
使用
send() 方法发送消息,可以将图片转换为二进制流,作为消息的内容。
6. 关闭连接:
使用
disconnect() 方法关闭连接。
注意:在发送消息时,需要指定消息的目的地(destination),可以是
队列
(queue)或主题(topic)。
以上是连接
ActiveMQ
传输图片的基本步骤,具体实现需要根据具体情况进行调整。