我有一个发布者正在发布关于主题的消息,我有两个订阅者1&s2正在接收消息。当我的发布者发送一条消息,并且两个订户都已启动时,他们都会收到该消息。但是,当我的订户
不
向上,我的发布者发送一条消息,然后当订阅者上来时,他们就不会收到该消息。我的订阅者如何在未启动时接收发送的消息?
注意:我用的是弹簧靴。
消息生产者.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-(消息生产者)
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
消息消费者.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
应用程序属性(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