【发布时间】:2018-01-19 01:45:04
【问题描述】:
我有三台机器位于不同的网络中:
- 作为主人
- 作为节点1
- 作为节点2
在 as-master 中,我将 WildFly 作为域主机主机,两个节点将 WildFly 作为域主机从机,每个节点都在 full-ha 服务器组中启动一个实例。从 as-master web 控制台中,我可以看到 full-ha 配置文件运行时中的两个节点,如果我部署 WAR,它会在两个节点上正确启动。
现在,我想要实现的是两个 WAR 实例之间的消息传递,即从 as-node-1 中的生产者实例发送消息,所有节点中的消费者都应该收到消息。
这是我尝试过的:向WildFly添加了一个主题domain.xml:
<jms-topic name="MyTopic" entries="java:/jms/my-topic"/>
创建一个 JAX-RS 端点以触发绑定到主题的生产者:
@Path("jms")
@RequestScoped
public class MessageEndpoint {
@Inject
JMSContext context;
@Resource(mappedName = "java:/jms/my-topic")
Topic myTopic;
@GET
public void sendMessage() {
this.context.createProducer().send(this.myTopic, "Hello!");
}
}
创建一个MDB监听主题:
@MessageDriven(activationConfig = {
@ActivationConfigProperty(
propertyName = "destination",
propertyValue = "java:/jms/my-topic"
),
@ActivationConfigProperty(
propertyName = "destinationType",
propertyValue = "javax.jms.Topic")
)
)
public class MyMessageListener implements MessageListener {
private final static Logger LOGGER = /* ... */
public void onMessage(Message message) {
try {
String body = message.getBody(String.class)
LOGGER.info("Received message: " + body);
} catch (JMSException e) {
throw new RuntimeException(e);
}
}
}
但是当我curl as-node-1/jms 时,我只能在 as-node-1 中看到日志,而当我 curl as-node-2/jms 时,我只能在 as-node-2 中看到日志。
消息不应该在所有部署了WAR的节点上传递吗?我错过了什么?
【问题讨论】:
标签: jms cluster-computing wildfly activemq-artemis