前段时间我发布了一篇关于 实现容错消息 传递的博客;在文章中,我提到使用 fabric registry discovery 来隐藏客户端的所有 IP 地址和端口详细信息。使用新的 Fuse 6.2,您将无法再找到它。那么我们如何在新的 Fuse 中实现容错消息传递呢?
在 JBoss Fuse 6.2 中,我们可以通过启动 MQ 网关来完成。它的作用是提供一个 IP 和端口来接受来自客户端的连接。 broker 的所有独立 IP 和端口对客户端都是隐藏的,客户端只需要知道 MQ 网关的 IP 和端口(默认端口:61616)。网关会发现 fabric 中的所有代理,无论传入的协议是什么,都可以是 OpenWire、MQTT、STOMP 和 AMQP。网关将查看为协议指定的主机中可用的代理,并将客户端连接到代理。如果主机组中有多个可用的broker,gateway可以将请求分派给它们,从而达到负载均衡的目的。有 3 种不同的方式来进行负载平衡,Random、Round Robin 和 Sticky。
如果客户端连接的代理出现任何问题并断开连接,网关将在组中寻找另一个可用的代理。这为您的服务提供了高可用性。
要启动 MQ 网关,只需选择容器的 gateway-mq 配置文件。
它会自动在 fabric 中寻找 broker:
我更新了我的 故障转移演示 而不是使用结构注册表发现,我更改了我的应用程序并将其连接到 MQ 网关。在这个demo中,你首先需要创建一个broker failoverMS,选择Master/Slave类型,使用blogdemo作为Group。
单击红色三角形开始配置代理。它将带您到为经纪人资料创建容器的页面。
并将开始创建您在配置中指定的容器数量。
然后我们可以启动 MQ-Gateway,在此之前,转到 gateway-mq 配置文件并编辑 io.fabric8.gateway.detecting.properties 文件。将端口更改为 8888,将默认虚拟主机更改为 blogdemo。
并将 gateway-mq 配置文件添加到容器中,如前所述。
让我们看一下客户端应用程序,它是用 Camel 编写的。查看Camel路由中的配置,这里无论是OpenWire还是MQTT协议,都设置为tcp://localhost:8888,即MQ网关的IP和端口。
此应用程序每 5 秒通过 OpenWire 和 MQTT 协议向代理发送一条消息。将配置文件“”部署到新容器。
进入 testcon 的容器控制台,你会发现骆驼路线正在运行。
在 MQ 网关中,您可以看到请求已分派到我们创建的代理。
并将消息发送给经纪人。
视频可以在这里找到。
可以在此处找到应用程序代码。
https://github.com/jbossdemocentral/jboss-fuse-mqgateway-failoverdemo