首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中连接到JMS域?

如何在Java中连接到JMS域?
EN

Stack Overflow用户
提问于 2022-07-24 09:53:55
回答 1查看 67关注 0票数 0

我能够运行下面的Java代码来向SonicMQ队列发送消息。它是从这里复制的。

代码语言: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();
        }
    }
}

但是,我得到了错误:

代码语言:javascript
复制
javax.jms.InvalidDestinationException: Queue not found

我认为这是因为我需要指定队列“域名”。将“域名”放在代码中的位置?

如前所述,这里应该设置以下JNDI参数:

代码语言:javascript
复制
sonicsw.jndi.mfcontext.domain=[Domain_Name]

如何在上面的代码中设置JNDI参数?

EN

回答 1

Stack Overflow用户

发布于 2022-07-24 22:12:56

通常,您将使用JNDI同时查找javax.jms.ConnectionFactoryjavax.jms.Destination (即javax.jms.Queuejavax.jms.Topic)。这将涉及为您所使用的特定实现实例化具有一组属性的javax.naming.InitialContext,然后使用该javax.naming.InitialContext执行查找。

但是,您是,实际上根本不使用JNDI。您将直接实例化JMS ConnectionFactory (即使用new progress.message.jclient.ConnectionFactory(...)),然后调用javax.jms.Session.createQueue(...)来实例化本地javax.jms.Queue

请记住,使用javax.jms.Session.createQueue(...)实例化本地javax.jms.Queue对JMS没有影响。正如the JavaDoc所指出的:

请注意,此方法只是创建一个封装队列名称的对象。它不会在JMS提供程序中创建物理队列。JMS不提供创建物理队列的方法,因为这将特定于给定的JMS提供程序。创建物理队列是特定于提供者的,通常是管理员执行的管理任务,尽管一些提供程序可能会在需要时自动创建它们。

获得InvalidDestinationException的原因是您试图使用的队列在JMS上不存在。您需要从管理上创建目标,或者更改传递给createQueue的名称,以匹配已经存在的队列。

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

https://stackoverflow.com/questions/73097343

复制
相关文章

相似问题

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