gpt4 book ai didi

java - Jboss 消息传递 JMS

转载 作者:行者123 更新时间:2023-12-02 13:48:32 24 4
gpt4 key购买 nike

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

有效的发送/接收教程也将被接受。任何能让我发送到队列并从该队列接收消息的内容都将得到接受的答案。

我正在使用Spring。

我想要一个使用应用程序上下文和 bean 注入(inject)来实现这一点的解决方案 ..

最佳答案

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

context = new InitialContext(environment)

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

factory = (QueueConnectionFactory)context.lookup(factoryName)

3.创建 javax.jms.QueueConnection

connection = factory.createQueueConnection(...)

4.创建一个javax.jms.QueueSession

session = connection.createQueueSession(...)

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

queue = (Queue) context.lookup(qJndiName)

到目前为止,它与发送相同......
6.使用 session 创建javax.jms.QueueReceiver

receiver = session.createReceiver(queue)

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

receiver.setMessageListener(this)

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

connection.start()

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

context.close()

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

这是您要求的工作示例:

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();
}
}
}

关于java - Jboss 消息传递 JMS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2478729/

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