У меня есть один издатель, который публикует сообщения по теме, и у меня есть 2 подписчика S1 и S2, которые получают сообщения. Когда мой издатель отправляет сообщение, и оба подписчика активны, они оба получают сообщение. Однако, когда мои подписчики не и мой издатель отправляет сообщение, тогда, когда подписчики подходят, они не получают сообщение. Как мои подписчики могут получать сообщения, отправленные, когда они не работают?
Примечание. Я использую Spring Boot.
MessageProducer.java
@RestController
@RequestMapping("/rest/produce")
public class MessageProducer {
private static final Logger LOG = LoggerFactory.getLogger(MessageProducer.class);
@Autowired
public JmsTemplate jmsTemplate;
@GetMapping("/{message}")
public void run(@PathVariable("message") final String message) throws Exception {
final String messageText = "Hello Blockchain World";
LOG.info("============= Sending " + message);
sendMessage(message);
}
public void sendMessage(String payload) {
this.jmsTemplate.convertAndSend("example", payload);
}
}
application.properties - (MessageProducer)
spring.qpidjms.remoteURL=amqp://127.0.0.1:5672
spring.qpidjms.username=admin
spring.qpidjms.password=admin
activemq.broker-url=tcp://localhost:61616
server.port=8888
spring.jms.pub-sub-domain=true
MessageConsumer.java
@Component
public class MessageConsumer {
private static final Logger LOG = LoggerFactory.getLogger(MessageConsumer.class);
@JmsListener( destination = "example")
public void processMsg(String message) {
LOG.info("============= Received: " + message);
}
}
Основной класс инициатора MessageConsumer (игнорировать имя класса)
@SpringBootApplication
@EnableJms
public class QpidJMSSpringBootHelloWorld {
public static void main(String[] args) {
SpringApplication.run(QpidJMSSpringBootHelloWorld.class, args);
}
}
Второй потребитель такой же, как первый, просто номер порта не был изменен в приложении. Свойства
application.properties (MessageConsumer-1, S1)
spring.qpidjms.remoteURL=amqp://127.0.0.1:5672
spring.qpidjms.username=admin
spring.qpidjms.password=admin
activemq.broker-url=tcp://localhost:61616
server.port=9999
spring.jms.pub-sub-domain=true
application.properties (S2)
spring.qpidjms.remoteURL=amqp://127.0.0.1:5672
spring.qpidjms.username=admin
spring.qpidjms.password=admin
activemq.broker-url=tcp://localhost:61616
server.port=9990
spring.jms.pub-sub-domain=true