Jboss Messaging JMS

Gan*_*row 2 java jms jboss-messaging

我成功地将消息发送到ReceiverQueue我的localhost Jboss服务器上的队列名称,如何检索我发送给它的消息,或者如何检查队列中是否有任何消息(如果有的话).或者我可以得到某种解释是什么是最好的方法.谢谢

也可以接受有效的发送/接收教程.任何能让我发送到队列并从该队列接收消息的东西都会得到接受的答案.

我正在使用Spring.

我想要一个使用bean注入的应用程序上下文来实现它的解决方案.

Mik*_*uka 5

标准JMS API步骤:
1.使用服务器的访问详细信息创建javax.naming.Context

context = new InitialContext(environment)
Run Code Online (Sandbox Code Playgroud)

2.在上下文中查找javax.jms.QueueConnectionFactory.工厂名称特定于JMS服务器

factory = (QueueConnectionFactory)context.lookup(factoryName)
Run Code Online (Sandbox Code Playgroud)

3.创建javax.jms.QueueConnection

connection = factory.createQueueConnection(...)
Run Code Online (Sandbox Code Playgroud)

4.创建一个javax.jms.QueueSession

session = connection.createQueueSession(...)
Run Code Online (Sandbox Code Playgroud)

5.在上下文中查找javax.jms.Queue

queue = (Queue) context.lookup(qJndiName)
Run Code Online (Sandbox Code Playgroud)

直到现在它与发送....相同
.6.使用会话创建一个javax.jms.QueueReceiver

receiver = session.createReceiver(queue)
Run Code Online (Sandbox Code Playgroud)

7. JMS API提供了两种检索消息的方法:
7.a使用其中一种receiver.receive()方法等待消息
7.b在类中实现javax.jms.MessageListener并将其注册为侦听器

receiver.setMessageListener(this)
Run Code Online (Sandbox Code Playgroud)

onMessage()每当有新消息到达时,JMS API都会调用您的方法.8
.不要忘记启动监听器:

connection.start()
Run Code Online (Sandbox Code Playgroud)

9.关闭上下文(非常重要,当您从同一程序访问多个JMS服务器时):

context.close()
Run Code Online (Sandbox Code Playgroud)

以上是独立应用程序的典型解决方案.在EJB环境中,您应该使用消息驱动的bean.您可以在http://java.sun.com/javaee/6/docs/tutorial/doc/gipko.html上找到ino,并在http://schuchert.wikispaces.com/EJB3+Tutorial+5+上找到教程.- + +消息驱动+豆

以下是您要求的工作示例:

import java.util.Hashtable;
import javax.naming.*;
import javax.jms.*;

public class JMSJNDISample implements MessageListener {

    public static final String JNDI_URL = "jnp://localhost:1099";
    public static final String JNDI_CONTEXT_FACTORY = "org.jnp.interfaces.NamingContextFactory";
    public static final String JMS_USER = null;
    public static final String JMS_PASSWORD = null;
    public static final String JMS_CONNECTION_FACTORY = "MyConnectionFactory";
    public static final String QUEUE_JNDI_NAME = "ReceiverQueue";

    QueueConnection qConn = null;
    QueueSession qSession = null;
    QueueSender qSender = null;
    QueueReceiver qReceiver = null;

    public JMSJNDISample () {
    }


    public void init() throws JMSException, NamingException {
        // Set up JNDI Context
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_CONTEXT_FACTORY);
        env.put(Context.PROVIDER_URL, JNDI_URL);
        if (JMS_USER != null)
            env.put(Context.SECURITY_PRINCIPAL, JMS_USER);
        if (JMS_PASSWORD != null)
            env.put(Context.SECURITY_CREDENTIALS, JMS_PASSWORD);
        Context jndiContext = new InitialContext(env);

        // Lookup queue connection factory
        QueueConnectionFactory cFactory = (QueueConnectionFactory)jndiContext.lookup(JMS_CONNECTION_FACTORY);

        // Create Connection
        if (JMS_USER == null || JMS_PASSWORD == null)
            qConn = cFactory.createQueueConnection();
        else {
            qConn = cFactory.createQueueConnection(JMS_USER, JMS_PASSWORD);
        }

        // Create Session
        qSession = qConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

        // Lookup Queue
        Queue queue = (Queue) jndiContext.lookup(QUEUE_JNDI_NAME);

        // Create Queue Sender
        qSender = qSession.createSender(queue);

        // Create Queue Receiver
        qReceiver = qSession.createReceiver(queue);
        qReceiver.setMessageListener(this);

        // Start receiving messages
        qConn.start();

        // Close JNDI context
        jndiContext.close();
    }


    public void sendMessage (String str) throws JMSException {
        TextMessage msg = qSession.createTextMessage(str);
        qSender.send(msg);
    }


    public void onMessage (Message message) {
        try {
            if (message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage)message;
                System.out.println("Text Message Received: "+textMessage.getText());
            } else {
                System.out.println(message.getJMSType()+" Message Received");
            }
        } catch (JMSException je) {
            je.printStackTrace();
        }
    }


    public void destroy() throws JMSException {
        if (qSender != null) qSender.close();
        if (qReceiver != null) qReceiver.close();
        if (qSession != null) qSession.close();
        if (qConn != null) qConn.close();
    }


    public static void main(String args[]) {
        try {
            JMSJNDISample sample = new JMSJNDISample();
            // Initialize connetion
            sample.init();
            // Send Message
            sample.sendMessage("Hello World");
            // Wait 2 sec for answer
            Thread.sleep(2000);
            // Disconnect
            sample.destroy();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)