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

Why am I getting only one message?

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

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

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

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) 将为真。

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

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

试试这个

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