175.8. 例子
175.8.1. 将消息(接收)消息发送到 JGroups 集群(来自)
若要向 JGroups 集群使用制作者端点发送消息,如以下代码片段中所示:
from("direct:start").to("jgroups:myCluster"); ... producerTemplate.sendBody("direct:start", "msg")
要接收来自上述代码片段(在相同或其它物理计算机上)的消息,请侦听来自给定集群的消息,就像以下代码片段中演示一样。
mockEndpoint.setExpectedMessageCount(1); mockEndpoint.message(0).body().isEqualTo("msg"); ... from("jgroups:myCluster").to("mock:messagesFromTheCluster"); ... mockEndpoint.assertIsSatisfied();
175.8.2. 接收集群视图更改通知
以下片段演示了如何创建侦听集群成员资格更改通知的消费者端点。默认情况下,端点仅消耗常规消息。
mockEndpoint.setExpectedMessageCount(1); mockEndpoint.message(0).body().isInstanceOf(org.jgroups.View.class); ... from("jgroups:clusterName?enableViewMessages=true").to(mockEndpoint); ... mockEndpoint.assertIsSatisfied();
175.8.3. 在集群中保留单例路由
以下片段演示了如何将单例消费者路由保留在 Camel 上下文的集群中。一旦主节点结束,其中一个从节点将被选为一个新的 master 并启动。在这个特定示例中,我们希望保持单例 jetty 实例侦听地址的 http://localhost:8080/orders` 上的请求。
JGroupsLockClusterService service = new JGroupsLockClusterService(); service.setId("uniqueNodeId"); ... context.addService(service); from("master:mycluster:jetty:http://localhost:8080/orders").to("jms:orders");