如何在这个简单的场景中开始实现JMS?

问题描述:

我需要实现这个场景关于这个简短的是 有两个基于Java的Web应用程序托管在两个不同的Tomcat实例上说T1和T2。当T2的内容发生变化时 我想将内容名称和日期修改为队列中的T1正在侦听。一旦T2放入队列,T1应该将这些 字段记录在数据库表中,这三个字段包括PRINT键,ContentName和Modified日期。我没有得到如何开始在这里实施 JMS,因为我是JMS的外行?我只知道JMS使用队列,可能有一个应用程序将成为发布者和其他消费者。 任何帮助如何开始这将是巨大的青睐?我正在使用tomcat的两个应用程序。在网上的不同网站有两个很多的材料,它让人困惑(其实我有很短的时间来实现这个:()如何在这个简单的场景中开始实现JMS?

冷静下来,并开始阅读。有几个简短的教程,不去极限长度(

基本上你从某处获得连接工厂(可能是通过JNDI查找,或者你可以直接创建它)。你问问工厂创建连接,连接创建会话,其余来自会话。

要发送消息,您可以使用类似于:

ConnectionFactory factory = getJMSConnectionFactory(); 
    Connection connection = factory.createConnection(); 
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    Queue queue = session.createQueue("MyQueue"); 
    MessageProducer producer = session.createProducer(queue); 
    connection.start(); 
    Message message = session.createTextMessage("hello world!"); 
    producer.sendMessage(message); 

要接收你可能会使用类似的消息:

ConnectionFactory factory = getJMSConnectionFactory(); 
    Connection connection = factory.createConnection(); 
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    Queue queue = session.createQueue("MyQueue"); 
    MessageConsumer consumer = session.createConsumer(queue); 
    connection.start(); 
    Message message = consumer.receive(); 
+0

感谢Joni为澄清。我还有一个问题,两个不同web服务器上的两个java应用程序如何处理同一个队列。正如你在你的例子中提到的队列queue = session.createQueue(“MyQueue”);这个队列对象实际在哪里(我指的是生产者端或消费者端)以及两个服务器如何访问相同的队列? – 2012-02-29 16:48:24

+0

表示队列的对象存在于双方中。队列本身由消息代理维护,消息代理可能是运行在不同机器上的外部程序。 JMS没有为连接到代理的客户端定义任何具体的有线协议,因此消费者和生产者如何访问队列取决于解决方案。 – Joni 2012-02-29 18:09:47

如果你有一个很短的时间,那么跳过JMS,其实如果你有很长一段时间,跳过JMS,它不适合你的简单用例。接收消息并处理它们的简单Servlet就足够了。

JMS是一个过于复杂的过度泛化的层,应该更简单一些。如果你只是必须使用某种排队系统,他们考虑更轻,更简单,如使用直接客户端库的RabbitMQ或某种Stomp客户端。

如果你真的觉得需要的话,你总是可以重新加入JMS客户端封装的开销和复杂性,这里有一个你不会的提示。