首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JBoss将消息发送到远程JMS队列

使用JBoss将消息发送到远程JMS队列
EN

Stack Overflow用户
提问于 2009-06-24 10:22:07
回答 3查看 12.6K关注 0票数 4

这看起来很简单,但我找不到一个简单的答案。

我希望打开到远程JMS代理的连接(已知IP和端口),打开到特定队列的会话(已知名称),并向此队列发送消息。

是否有任何简单的Java (如果可能的话是标准的)来做到这一点?

编辑

好吧,我现在明白了,JMS是一个驱动程序规范,就像JDBC一样,而不是我想的通信协议。

考虑到我在JBoss中运行,我仍然不知道如何创建一个JBossConnectionFactory

编辑

实际上,我给出了一些问题(hmmm),如果JMS需要与JDBC一样处理,那么我需要使用MQ实现提供的客户机。由于我们使用SonicMQ作为代理,所以我决定嵌入SonicMQ提供的sonic_Client.jar库。

这是在一个独立的Java应用程序和我们的JBoss服务中工作的。

谢谢你的帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-24 10:50:18

您将需要使用JMS,创建一个QueueConnectionFactory并从那里开始。您创建QueueConnectionFactory的确切方式将是特定于供应商的(JMS基本上是消息队列的驱动程序规范,就像用于数据库的JDBC一样),但是在IBM上,它如下所示:

代码语言:javascript
复制
MQQueueConnectionFactory connectionFactory = new MQQueueConnectionFactory();
connectionFactory.setHostName(<hostname>);
connectionFactory.setPort(<port>);
connectionFactory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
connectionFactory.setQueueManager(<queue manager>);
connectionFactory.setChannel("SYSTEM.DEF.SVRCONN");

QueueConnection queueConnection = connectionFactory.createQueueConnection();
QueueSession queueSession = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

Queue queue = queueSession.createQueue(<queue name>);

QueueSender queueSender = session.createSender(queue);
QueueReceiver queueReceiver = session.createReceiver(queue); 

编辑(以下问题编辑)

访问远程队列或任何队列的最佳方法是将Queue实例添加到JNDI注册表中。对于远程队列,这是使用在服务器启动时添加Queue实例的MBeans实现的。

看看http://www.jboss.org/community/wiki/UsingWebSphereMQSeriesWithJBossASPart4,虽然它是IBM的一个例子,但本质上是连接到任何远程队列所必须做的事情。

如果您查看jbossmq-destinations-service.xmlorg.jboss.mq.server.jmx,您将看到需要创建的与JBoss队列相关的MBeans。

票数 4
EN

Stack Overflow用户

发布于 2009-06-24 13:55:10

下面是使用SonicMQ库连接到sonic_Client.jar代理的代码:

代码语言:javascript
复制
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;


public class JmsClient
{
    public static void main(String[] args) throws JMSException
    {
        ConnectionFactory factory = new progress.message.jclient.ConnectionFactory("tcp://<host>:<port>", "<user>", "<password>");
        Connection connection = factory.createConnection();

        try
        {
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            try
            {
                MessageProducer producer = session.createProducer(session.createQueue("<queue>"));
                try
                {
                    producer.send(session.createTextMessage("<message body>"));
                }
                finally
                {
                    producer.close();
                }
            }
            finally
            {
                session.close();
            }
        }
        finally
        {
            connection.close();
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-01-08 15:38:34

实际上,我使用的是JBoss 4,使用JNDI并不难。

首先,你必须知道你的JNDI在哪里运行。

在我的JBoss (conf\jboss-service.xml)中,我有:

代码语言:javascript
复制
<mbean code="org.jboss.naming.NamingService" name="jboss:service=Naming" xmbean-dd="resource:xmdesc/NamingService-xmbean.xml">
    ...
    <attribute name="Port">7099</attribute>
    ...
</mbean>

这很重要,这是您想要连接的端口。

现在您可以使用以下代码轻松地连接到JNDI:

代码语言:javascript
复制
Hashtable<String, String> contextProperties = new Hashtable<String, String>();
contextProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
contextProperties.put(Context.PROVIDER_URL, "jnp://localhost:7099");

InitialContext initContext = new InitialContext(contextProperties);

现在,当您有上下文时,它非常类似于@Nick的答案,除了创建连接工厂之外,您必须使用:

代码语言:javascript
复制
QueueConnectionFactory connFactory = (QueueConnectionFactory) initContext.lookup("ConnectionFactory");

此外,如果已经部署了一些

代码语言:javascript
复制
Queue queue = (Queue) initContext.lookup("queueName");

上面的所有代码都是用JBoss 4.2.2GA和JBossMQ测试的(如果我是对的,JBossMQ在4.2.3中用JBoss消息代替)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1037526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档