我开始使用ActiveMQ时遇到了一些问题。我在没有任何自定义的情况下使用本地ActiveMQ,我编写了简单的发布商应用
@Component
public class VirtualTopicSender {
@Autowired
private JmsTemplate jmsTemplate;
public void send() {
Topic topic = new ActiveMQTopic("VirtualTopic.TEST-VIRTUAL-TOPIC");
int i = 0;
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
jmsTemplate.convertAndSend(topic, i++);
}
}
}
还有简单的接收器
@Component
public class VirtualTopicReceiver {
@JmsListener(destination="Consumer.myConsumer0.VirtualTopic.TEST-VIRTUAL-TOPIC", containerFactory = "defaultMessageListenerContainerFactory")
public void receiveMessages(Session session, String message) {
System.out.println(message);
try {
session.commit();
} catch (JMSException e) {
e.printStackTrace();
}
try {
System.out.println(session.getTransacted());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
两者都是springboot's。
我在做的是:
现在我从10秒钟开始缺少输出,netstat也显示连接已建立10秒
$ netstat -an | grep 575* | grep 61616
TCP 127.0.0.1:57809 127.0.0.1:61616 ESTABLISHED
TCP 127.0.0.1:61616 127.0.0.1:57788 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57789 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57790 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57791 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57792 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57793 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57794 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57795 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57796 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57797 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57798 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57799 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57800 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57801 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57802 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57803 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57804 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57805 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57806 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57808 TIME_WAIT
TCP 127.0.0.1:61616 127.0.0.1:57809 ESTABLISHED
你知道如何摆脱那10秒的延迟吗?如果我使用多个接收器实例进行一些应用程序,那么在ActiveMQ切换实例之前我不会有丢失消息10秒的风险,但是现在我不知道如何解决这个问题。
任何帮助将不胜感激。
答案 0 :(得分:0)
好的,现在一切都很清楚了。昨天我花了一整天的时间阅读文档并试图理解这种行为,但今天我决定确保消费者在按ctrl + c时真的死了 - 好吧它没有。
我已经在我的接收器正在呼叫的另一个应用程序中创建了简单的休息端点,并且在ctrl + c接收器仍然进行了10秒的休息呼叫之后。
有问题的行为存在于git bash中。