Artemis 应用程序听不到对方的声音
Artemis apps don't hear each other
我的应用程序 spring-boot-starter-artemis
依赖于 1.5.8 版本。外部 Artemis 服务器使用 2.6.0。一个应用正在向地址发布消息:tacocloud.order.queue:
@Configuration
public class ApplicationConfiguration {
@Bean
public Destination orderQueue() {
return new ActiveMQQueue("tacocloud.order.queue");
}
}
第一个应用的服务层:
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class JmsOrderMessagingService implements OrderMessagingService {
private final JmsTemplate jmsTemplate;
private final Destination destination;
@Override
public void sendOrder(Order order) {
jmsTemplate.send(destination, session -> {
Message message = session.createObjectMessage(order);
message.setStringProperty("X_ORDER_SOURCE", "WEB");
return message;
});
}
}
第二个应用正在侦听地址:tacocloud.order.queue
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class OrderReceiver {
private final JmsTemplate jmsTemplate;
@GetMapping("/new/message")
public Message receiveOrder() {
return jmsTemplate.receive("tacocloud.order.queue");
}
}
虽然指定监听的地址是tacocloud.order.queue,但是在Artemis管理控制台中注册为jms.queue.tacocloud.order.queue.
问题:如何让 2 个应用互相听到对方的声音?
您需要:
- 更新您的客户端以使用最新版本的
spring-boot-starter-artemis
(例如 2.0.3.RELEASE
)。
- 更新您的接受器以使用
anycastPrefix=jms.queue.;multicastPrefix=jms.topic.
。从 2.4.0 升级时,the Artemis documentation 中会注明这一点。
我的应用程序 spring-boot-starter-artemis
依赖于 1.5.8 版本。外部 Artemis 服务器使用 2.6.0。一个应用正在向地址发布消息:tacocloud.order.queue:
@Configuration
public class ApplicationConfiguration {
@Bean
public Destination orderQueue() {
return new ActiveMQQueue("tacocloud.order.queue");
}
}
第一个应用的服务层:
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class JmsOrderMessagingService implements OrderMessagingService {
private final JmsTemplate jmsTemplate;
private final Destination destination;
@Override
public void sendOrder(Order order) {
jmsTemplate.send(destination, session -> {
Message message = session.createObjectMessage(order);
message.setStringProperty("X_ORDER_SOURCE", "WEB");
return message;
});
}
}
第二个应用正在侦听地址:tacocloud.order.queue
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class OrderReceiver {
private final JmsTemplate jmsTemplate;
@GetMapping("/new/message")
public Message receiveOrder() {
return jmsTemplate.receive("tacocloud.order.queue");
}
}
虽然指定监听的地址是tacocloud.order.queue,但是在Artemis管理控制台中注册为jms.queue.tacocloud.order.queue.
问题:如何让 2 个应用互相听到对方的声音?
您需要:
- 更新您的客户端以使用最新版本的
spring-boot-starter-artemis
(例如2.0.3.RELEASE
)。 - 更新您的接受器以使用
anycastPrefix=jms.queue.;multicastPrefix=jms.topic.
。从 2.4.0 升级时,the Artemis documentation 中会注明这一点。