我有一组参数需要用来访问JMS队列。
任何人都可以向我提供一个基本示例,说明如何使用这些参数将XML块发送到等待服务器。对于这个初始版本,我不介意对这些参数进行硬编码。
我目前正在尝试这个:
Context ctx = new InitialContext();
QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) ctx.lookup("QueueConnectionFactory");
Queue queue = (Queue) ctx.lookup("OCP.GET.PRODUCTS.COMSRV");
QueueConnection queueConnection = queueConnectionFactory.createQueueConnection();
QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender queueSender = queueSession.createSender(queue);
TextMessage message = queueSession.createTextMessage();
message.setText(xmlString);
但我不知道如何设置Host,Port,QueueManager或Channel
的参数提供给我的参数是
我是Java和JMS的新手,我开始淹没这个。
答案 0 :(得分:4)
我的理解是您正在尝试连接到MQSeries(QueueManager和Channel是MQ概念,而不是JMS API AFAIK的一部分)所以我认为您必须使用MQ特定的客户端API。我真的不是MQ专家,但似乎下面的代码(见Implementing vendor-independent JMS solutions)接近您所寻找的内容:
MQQueueConnectionFactory qconFactory = new MQQueueConnectionFactory();
qconFactory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP); //Used when the MQSeries server is on a different host from the client
qconFactory.setQueueManager(queueManager);
qconFactory.setHostName(hostName);
qconFactory.setPort(port);
qconFactory.setChannel(channel);
connection = qconFactory.createQueueConnection();
session1 = connection.createQueueSession(true, Session.CLIENT_ACKNOWLEDGE);.....
正如我所说,我不是MQ专家,但MQQueueConnectionFactory
似乎已经意识到你所谈论的大部分事情。
旁注:
使用JNDI时,需要设置JNDI环境属性,如初始上下文工厂和提供者URL 。基本上,这些属性用于声明用于创建初始上下文的类以及在何处查找JNDI服务器。显然,这些属性的值取决于您要连接的JNDI服务。
您可以使用非空InitialContext
constructor并将environment
参数传递给它来指定环境属性。例如,要连接到BEA WebLogic JNDI服务:
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL,"t3://myhost:7001");
ctx = new InitialContext(p);
或者您可以提供jndi.properties
文件并使用非arg InitialContext
constructor。例如,要连接到IBM WebSphere JNDI服务,您可以在类路径中放置一个包含以下内容的jndi.properties
文件:
java.naming.provider.url=iiop://myhost:9001
java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
第二种方法当然更具可移植性,因为您不需要对Java代码中的参数值进行硬编码(尽管这可能不是问题)。
现在,在您的情况下,我无法判断您是否需要这个(甚至更少使用的值),因为您没有提供有关上下文的任何详细信息(如应用程序服务器或JMS提供程序或消息传递)您尝试连接的解决方案)。