【问题标题】:Why am I getting only one message?为什么我只收到一条消息?
【发布时间】:2016-08-12 17:09:40
【问题描述】:

所以我有一个简单的 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);
    }
  }

}

【问题讨论】:

    标签: java jms activemq


    【解决方案1】:

    最初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();
        }
      }
    }
    

    【讨论】:

    • 该死...真是个小错误...我以为我的 JMS 设置有问题...非常感谢!
    • @Teshte 我的荣幸.. 是的,有时它会发生。
    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2020-01-17
    • 2019-02-23
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多