Java 基本JMS查询

Java 基本JMS查询,java,jms,Java,Jms,我需要使用一组参数来访问JMS队列 有谁能给我提供一个基本的例子,说明我如何使用这些参数向等待的服务器发送一块XML。对于这个初始版本,我不介意硬编码这些参数 我目前正在尝试: Context ctx = new InitialContext(); QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) ctx.lookup("QueueConnectionFactory"); Queue queue =

我需要使用一组参数来访问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);
但是我不知道如何设置主机、端口、队列管理器或通道的参数

提供给我的参数是

  • 经理:OCP.QMGR
  • 频道:OCP.SVRCONN
  • 港口:14234
  • 主机:Host.server.com
  • sentToQueue:OCP.GET.PRODUCTS.COMSRV
  • replyToQueue:COMSRV.GET.PRODUCTS.OCP

我对Java和JMS非常陌生,并开始沉溺于此。

我的理解是,您正在尝试连接到MQSeries(队列管理器和通道是MQ概念,不是JMS API AFAIK的一部分),因此我认为您必须使用特定于MQ的客户端API。我确实不是MQ专家,但下面的代码(请参阅)似乎与您要查找的代码非常接近:

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服务

您可以通过使用非空并向其传递
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
文件并使用非参数。例如,要连接到IBM WebSphere JNDI服务,您需要在类路径上放置一个包含以下内容的
JNDI.properties
文件:

java.naming.provider.url=iiop://myhost:9001
java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
第二种方法当然更具可移植性,因为您不需要在Java代码中硬编码参数值(尽管这可能不是问题)


现在,在您的情况下,我无法判断您是否需要这个(更不用说使用什么值),因为您没有提供任何上下文细节(如应用程序服务器或JMS提供程序或您尝试连接的消息传递解决方案)

我的理解是,您正在尝试连接到MQSeries(QueueManager和Channel是MQ概念,不是JMS API AFAIK的一部分),因此我认为您必须使用特定于MQ的客户端API。我确实不是MQ专家,但下面的代码(请参阅)似乎与您要查找的代码非常接近:

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服务

您可以通过使用非空并向其传递
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
文件并使用非参数。例如,要连接到IBM WebSphere JNDI服务,您需要在类路径上放置一个包含以下内容的
JNDI.properties
文件:

java.naming.provider.url=iiop://myhost:9001
java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
第二种方法当然更具可移植性,因为您不需要在Java代码中硬编码参数值(尽管这可能不是问题)


现在,在您的情况下,我无法判断您是否需要这个(更不用说使用什么值),因为您没有提供任何上下文细节(如应用程序服务器或JMS提供程序或您尝试连接的消息传递解决方案)

主机上正在侦听什么:端口?您的JMS提供者是什么?你在使用MQ系列吗?有人告诉我应该使用javax.jms。。。这有帮助吗?没有。至少我没有(因为您提到的概念不是JMS的一部分)。在主机上侦听什么:端口?您的JMS提供者是什么?你在使用MQ系列吗?有人告诉我应该使用javax.jms。。。这有帮助吗?没有。至少我没有(因为你提到的概念不是JMS的一部分)。回答得很好,你很好地解释了这两种方法。可能需要补充的是,作为瘦客户机运行需要您提到的JNDI设置,以及供应商提供的JAR支持。回答很好,您对这两种方法都做了很好的解释。可能需要补充的是,作为瘦客户机运行将需要您提到的JNDI设置,以及供应商提供的支持JAR。