175.8. 例子
175.8.1. 向 JGroups 集群发送(接收)消息
为了发送消息到 JGroups 集群,可使用 producer 端点,如以下代码片段中所示。
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 上下文的集群中。一旦主控节点结束,其中一个从设备将被选为新的主设备并启动。在这个特定示例中,我们希望将 singleton 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");