JMS客户端独立Java程序

Vic*_*cky 4 java jms

我想使用一个独立的java程序来轮询和检索来自JMS队列的消息而不是MDB.可能吗?

如果是,是否可以共享任何示例/链接?谢谢.

问候,V

str*_*mqm 5

我同意Spring JMS很简单的另一个响应(让你知道一点Spring,并且有框架)但是它也很简单.只需在main中编写一些代码来设置ConnectionFactory,Connection和Session,例如参见

http://download.oracle.com/javaee/1.4/tutorial/doc/JMS4.html

您可以从JNDI查找ConnectionFactory,也可以自己实例化特定于提供者的ConnectionFactory; 例如,对于WebSphere MQ,您可以编写如下内容:

MQConnectionFactory cf = new MQConnectionFactory();
cf.setHostName(HOSTNAME);
cf.setPort(PORT);
cf.setChannel(CHANNEL);
cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);
Run Code Online (Sandbox Code Playgroud)

(其他提供商可用,我只是不能编写我的头顶上的代码:)然后标准JMS

Connection c = cf.createConnection();
Session s = c.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue q = s.createQueue("myQueue");
MessageConsumer c = s.createConsumer(q);
Run Code Online (Sandbox Code Playgroud)

此时你有两个选择.您可以创建一个javax.jms.MessageListener实现并在MessageConsumer上设置它,或者如果您想要更直接的控制,您可以启动一个使用MessageConsumer进行get-with-wait的线程(receive(int timeout) )或没有等待获得(receiveNoWait())然后睡觉直到下一次接收.不要使用receive(),但这对JMS来说绝不是一个好主意.如果您需要多个轮询线程,那么您应该检查JMS会话/消费者对象的并发性限制.

如果您想要发生任何事情,请不要忘记在完成设置后调用Connection.start()

优点是你只需要你的JMS提供者.jars在类路径上,没有框架等.缺点是它比Spring更复杂,它提供了相当优雅的解决方案 - 注意这里有多少设置代码,相比Spring提取的摘要一切都好.真的取决于你的喜好,其他要求等.