JMS在Java中是如何工作的?
异步JMS是如何工作的?下面是示例代码:JMS在Java中是如何工作的?,java,jms,Java,Jms,异步JMS是如何工作的?下面是示例代码: public class JmsAdapter implements MessageListener, ExceptionListener { private ConnectionFactory connFactory = null; private Connection conn = null; private Session session = null; public void receiveMessages() { try {
public class JmsAdapter implements MessageListener, ExceptionListener
{
private ConnectionFactory connFactory = null;
private Connection conn = null;
private Session session = null;
public void receiveMessages()
{
try
{
this.session = this.conn.createSession(true, Session.SESSION_TRANSACTED);
this.conn.setExceptionListener(this);
Destination destination = this.session.createQueue("SOME_QUEUE_NAME");
this.consumer = this.session.createConsumer(destination);
this.consumer.setMessageListener(this);
this.conn.start();
}
catch (JMSException e)
{
//Handle JMS Exceptions Here
}
}
@Override
public void onMessage(Message message)
{
try
{
//Do Message Processing Here
//Message sucessfully processed... Go ahead and commit the transaction.
this.session.commit();
}
catch(SomeApplicationException e)
{
//Message processing failed.
//Do whatever you need to do here for the exception.
//NOTE: You may need to check the redelivery count of this message first
//and just commit it after it fails a predefined number of times (Make sure you
//store it somewhere if you don't want to lose it). This way you're process isn't
//handling the same failed message over and over again.
this.session.rollback()
}
}
}
但我对Java和JMS还不熟悉。我可能会使用onMessage方法中的消息。但我不知道它到底是怎么工作的
我需要在JmsAdapter类中添加main方法吗?在添加main方法之后,是否需要创建一个jar&然后以“java-jarabc.jar”的形式运行jar
非常感谢您的帮助
更新:我想知道的是,如果我添加main方法,我是否应该简单地在main中调用receiveMessages()?然后在运行之后,侦听器会继续运行吗?如果有消息,它会在onMessage方法中自动检索吗 另外,如果侦听器持续侦听,是否需要CPU???对于线程,当我们创建一个线程并将其置于睡眠状态时,CPU利用率为零,对于侦听器,它是如何工作的 注意:我只有Tomcat服务器&我不会使用任何jms服务器。我不确定监听器是否需要任何特定的jms服务器,比如JBoss?但是在任何情况下,请假设我除了tomcat什么都不会吃。
谢谢 在开始跑步之前,你需要学会走路
- 阅读/编写Java编程教程。这应该解释(除其他外)如何从命令行编译和运行Java程序
- 阅读/编写关于JMS的教程
- 阅读有关如何创建可执行JAR文件的Oracle资料
- 弄清楚你想做什么。。。和设计您的应用程序
看看你所展示的和告诉我们的:
- 您可以向该类添加一个main方法,但是要生成一个可执行的JAR文件,您必须使用一个清单条目来创建JAR文件,该清单条目用main方法指定类的名称
- 在代码生效之前,您还需要做很多工作:
- 添加代码以(至少)记录您捕获的异常
- 添加代码以处理消息
- 添加代码以初始化连接工厂和连接对象
- 就像我上面说的,你可能需要一些设计。。。这样你就不会在“厨房水槽”课上什么都做了
如果我添加main方法,我应该在main中调用receiveMessages()吗 这是一种方法。但是就像我说的,你真的需要设计你的应用程序 然后在运行之后,侦听器会继续运行吗 这并不完全清楚。只要
main
线程处于活动状态,它就应该保持运行,但是当main
方法返回时,不会立即看到发生了什么。(这取决于是否将JMS线程创建为守护进程线程,但没有指定。)
如果有消息,它会在onMessage方法中自动检索吗
似乎在调用onMessage
方法之前检索了每条消息(从套接字读取)
另外,如果侦听器持续侦听,是否需要CPU 如果实施得当就不会 对于线程,当我们创建一个线程并将其置于睡眠状态时,CPU利用率为零,对于侦听器,它是如何工作的
在某个级别,侦听器线程将进行系统调用,等待数据到达网络套接字。我不知道它到底是如何实现的,但这可以像对网络套接字的
InoutStream
调用read()
一样简单。线程在阻塞系统调用中等待时不使用CPU。在开始尝试运行之前,您需要学习如何行走
- 阅读/编写Java编程教程。这应该解释(除其他外)如何从命令行编译和运行Java程序
- 阅读/编写关于JMS的教程
- 阅读有关如何创建可执行JAR文件的Oracle资料
- 弄清楚你想做什么。。。和设计您的应用程序
看看你所展示的和告诉我们的:
- 您可以向该类添加一个main方法,但是要生成一个可执行的JAR文件,您必须使用一个清单条目来创建JAR文件,该清单条目用main方法指定类的名称
- 在代码生效之前,您还需要做很多工作:
- 添加代码以(至少)记录您捕获的异常
- 添加代码以处理消息
- 添加代码以初始化连接工厂和连接对象
- 就像我上面说的,你可能需要一些设计。。。这样你就不会在“厨房水槽”课上什么都做了
如果我添加main方法,我应该在main中调用receiveMessages()吗 这是一种方法。但是就像我说的,你真的需要设计你的应用程序 然后在运行之后,侦听器会继续运行吗 这并不完全清楚。只要
main
线程处于活动状态,它就应该保持运行,但是当main
方法返回时,不会立即看到发生了什么。(这取决于是否将JMS线程创建为守护进程线程,但没有指定。)
如果有消息,它会在onMessage方法中自动检索吗
似乎在调用onMessage
方法之前检索了每条消息(从套接字读取)
另外,如果侦听器持续侦听,是否需要CPU 如果实施得当就不会 对于线程,当我们创建一个线程并将其置于睡眠状态时,CPU利用率为零,对于侦听器,它是如何工作的 在某个级别上,侦听器线程将进行系统调用,以等待数据到达