JMS在Java中是如何工作的?

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 {

异步JMS是如何工作的?下面是示例代码:

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利用率为零,对于侦听器,它是如何工作的

在某个级别上,侦听器线程将进行系统调用,以等待数据到达