java - 如何将消息从 Activemq 推送到 Java 应用程序

标签 java jms activemq java-ee-6

开发者您好,

我想使用 JMS 库编写 2 个 .java 文件,库名称为 MessageProducerMessageConsumer

我在我的 lib 文件夹中添加了 activemq-all-5.8.0.jarcommons-io-2.4.jar 文件。我将 Activemq 的端口号从 61616 更改为 61617

使用 MessageProducer.java 文件,我将向 Activemq 发送消息。为此,我编写了代码,它工作正常。如果您想查看,请单击此 Link .

enter image description here

我想从Activemq发送消息到MessageConsumer.java。这是应用程序位于Apache Tomcat(http:///localhost:8080/ExecutableFileProcess/MessageConsumer)

一旦 MessageConsumer 收到消息,它将消息正文与消息分开,并且仅在控制台上打印(仅用于我的测试)。为此,我编写了以下 2 java 文件。但它不起作用。

MessageConsumer.java:

 package PackageName;
 import java.io.IOException;
 import javax.jms.Connection;
 import javax.jms.ConnectionFactory;
 import javax.jms.MessageListener;
 import javax.jms.Queue;
 import javax.jms.Session;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import org.apache.activemq.ActiveMQConnectionFactory;
 public class MessageConsumer extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
        throws ServletException, IOException {
try {
    //creating connectionfactory object for way
    ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("admin","admin","tcp://localhost:61617");
    //establishing the connection b/w this Application and Activemq
    Connection connection=connectionFactory.createConnection();
    Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    Queue queue=session.createQueue("MessageTesing");
    javax.jms.MessageConsumer consumer=session.createConsumer(queue);
    //fetching queues from Activemq
    MessageListener listener = new MyListener();
    consumer.setMessageListener(listener);
    connection.start();
} catch (Exception e) {
    // TODO: handle exception
}

}
}

MyListener.java:

package PackageName;
import javax.jms.Message;
import javax.jms.MessageListener;
public class MyListener implements MessageListener {
public void onMessage(Message msg) {
    System.out.println(msg);
}
};

我没有在Activemq console中配置队列的目的地,并且在从MessageProducer.java发送消息时也没有提到“目的地”。

我正在使用Eclipse。如何在控制台中打印messagebody,实际上基于messagebody我会在我的MessageConsumer.java中执行一些操作。但是为了我的测试我需要看到messagebody。

我希望你明白我在尝试什么。

我是JMSJava的新手,所以你能解释清楚吗?到目前为止我使用Google搜索编写了代码。但我没有在任何地方找到这个问题.

谁能建议我。

谢谢。

最佳答案

可能您的程序只是启动和终止,因为您已经编写了客户端来异步接收消息(通过在不同线程中使用MessageListener),并且您的主程序线程刚刚终止。

尝试这样的事情:

                connection.start();

                System.out.println("Press a key to terminate");
                try {
                    System.in.read();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                System.out.println("End");

这应该让你的程序保持运行,直到你按下一个键。

<小时/>

要读取 TextMessage 的正文,请使用类似的内容(引用自 ActiveMQ hello world examples :

            if (message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) message;
                String text = textMessage.getText();
                System.out.println("Received: " + text);
            } else {
                System.out.println("Received: " + message);
            }

关于java - 如何将消息从 Activemq 推送到 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18128089/

相关文章:

java - SVG 转 PNG - batik

java - 为什么不将嵌套类设为静态?

java - JMS异常监听器

java - ActiveMQ:使用PooledConnectionFactory不会提高性能

macos - 如何在 Mac OS 系统启动时启动 ActiveMq

java - ActiveMQ 嵌入式与独立性能

java - 是否可以使用 Gson.fromJson() 来获取 ArrayList<ArrayList<String>>?

java - 从 WebSphere MQ 中的集群队列接收消息

java - 为什么 jmsTemplate 总是空的?使用 spring 和 Apache ActiveMQ

java - Mule - 根据 CSV header 值将 CSV 解析为 HashMap 的 ArrayList