gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:17:03 25 4
gpt4 key购买 nike

开发者您好,

我想使用 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/

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