gpt4 book ai didi

java - 为什么我只收到一条消息?

转载 作者:行者123 更新时间:2023-12-01 18:03:23 26 4
gpt4 key购买 nike

所以我有一个简单的 JMS 应用程序,使用由 activeMQ 提供支持的主题。它有效,但只发送了 1 条消息(即使我在控制台中编写了更多行,因此尝试发送更多内容)。

当我检查 ActiveMq 的 Web 控制台时,只发送了 1 条消息(我也在 ReceiverTopic 类中收到此消息)...为什么会发生这种情况?

下面您可以看到我的发件人代码:

package topic;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class SenderTopic {
private ConnectionFactory factory = null;
private Connection connection = null;
private Session session = null;
private Destination destination = null;
private MessageProducer producer = null;

private boolean jmsInitialized = false;

public SenderTopic() {

}

private void initJMS() throws JMSException {
factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createTopic("SAMPLE_TOPIC");
producer = session.createProducer(destination);
jmsInitialized = true;
}

private void sendMessage(String message) {
if (!jmsInitialized) {
try {
initJMS();
sendTextMessage(message);
} catch (JMSException e) {
jmsInitialized = false;
e.printStackTrace();
}
}
}

private void sendTextMessage(String message) throws JMSException {
TextMessage textMessage = session.createTextMessage(message);
producer.send(textMessage);
}

public static void main(String[] args) throws IOException {
SenderTopic receiver = new SenderTopic();

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String message = reader.readLine();
receiver.sendMessage(message);
}
}

}

最佳答案

最初,jmsInitialized 的值为 false,因此您的 if 条件 (!jmsInitialized) 将为 true。

在第二次调用 sendMessage 时,jmsInitialized 的值将为 true 并且 if 条件失败,因为您使用的是 not boolean 值。

您可以添加 else 条件,只需调用 sendTextMessage

试试这个

private void sendMessage(String message) {
try {
if (!jmsInitialized) {
initJMS();
sendTextMessage(message);
}else{
sendTextMessage(message);
}
} catch (JMSException e) {
jmsInitialized = false;
e.printStackTrace();
}
}
}

关于java - 为什么我只收到一条消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38913617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com