如何解决如何在不使用JNDI的情况下在ConnectionFactory中指定主机,端口和通道
正在尝试创建一个独立的Java应用程序,以使用JMS将消息发送到其他应用程序。我的参考代码使用queueConnectionFactory,并且所有连接参数都在WAS服务器中配置并使用JNDI检索。但是我不能在独立应用程序中使用服务器。在这种情况下,如何在不使用JNDI的情况下获取或连接到相同的主机,端口和队列。
下面是我到目前为止尝试过的代码
try {
//Set connection factory
ActiveMQConnectionFacotry connectionFactory = new ActiveMQConnectionFactory("");
//create connection with connection factory
Connection connection = connectionFactory.createConnection();
connection.start();
//create session from connection
Session session = connection.createSession(false,Session.AUTO_ACKNowLEDGE);
//create queue from session
Destination destination = session.createQueue("sample.Queuename");
//create messageProducer
MessageProducer producer = session.createProducer(destination);
我的参考代码
//@Resource
private static Queue queue;
private QueueConnection con;
private QueueSession session;
private QueueSender sender;
private static InitialContext ctx;
private static JAXBContext jaxb;
private static IBwLogContext logContext = BwLogContextFactory.create();
static{
try {
ctx = new InitialContext();
queue = (Queue) ctx.lookup("jms/sampleJNDI1");
qcf = (QueueConnectionFactory) ctx.lookup("jms/sampleJNDI2");
JMS配置是jms / sampleJNDI2的服务器
现在如何在没有服务器的情况下连接到相同的xxx,yyy,zzz。我们可以将这些详细信息放在属性文件中并使用它们吗?如果是这样,该如何做或还有其他方法。我从服务器复制了硬编码的队列名称。但是卡在ConnectionFactory上。
预先感谢
解决方法
您似乎正在使用类ActiveMQConnectionFactory
。 ActiveMQ 5.x和ActiveMQ Artemis都使用该类名,但是包名称不同。无论好坏,两者的基本配置都相同:
ActiveMQConnectionFactory qcf = new ActiveMQConnectionFactory
("tcp://" + host + ":" + port);
QueueConnection qc = qcf.createQueueConnection ("user","password");
您可以在连接工厂上设置其他属性,但是主机,端口,用户和密码可能是最常用的。
ActiveMQ 5.x和ActiveMQ Artemis均支持专有协议之外的其他协议(分别为OpenWire和Artemis Core)。例如,您可以使用Qpid JMS运行时库通过AMQP协议进行连接。这具有不同的配置方式,您可能会使用的所有其他客户端运行时库也是如此。
这是使用IBM的“ Class for Java”运行时为IBM MQ建立连接工厂的一种方法。
import com.ibm.msg.client.wmq.*;
import com.ibm.mq.jms.*;
MQQueueConnectionFactory qcf = new MQQueueConnectionFactory();
qcf.setHostName ("my_mq.acme.com");
qcf.setPort (1414);
qcf.setQueueManager ("QMA");
qcf.setChannel ("SYSTEM.DEF.SVRCONN");
qcf.setTransportType (WMQConstants.WMQ_CM_CLIENT);
QueueConnection qc = qcf.createQueueConnection ("user","password");
下面是Qpid-JMS的示例,它为许多消息代理提供了AMQP有线协议支持:
QueueConnectionFactory qcf = new
org.apache.qpid.jms.JmsConnectionFactory
("amqp://" + host + ":" + port);
QueueConnection qc = qcf.createQueueConnection ("user","password");
我不确定为什么,但是使用JMS客户端运行时 经常没有充分的文档说明。根据我的经验,总是可以找到相关设置的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。