【问题标题】:How to start implementing JMS in this simple scenario? [closed]如何在这个简单的场景中开始实现 JMS? [关闭]
【发布时间】:2012-03-18 21:07:56
【问题描述】:

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

【问题讨论】:

    标签: java jms


    【解决方案1】:

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

    JMS 是一个过于复杂且过于泛化的层,它应该更简单。如果您只是必须使用某种排队系统,他们会考虑更轻松、更简单的方法,例如为RabbitMQStomp 某种客户端使用直接客户端库。

    如果您真的觉得需要,您可以随时返回并添加 JMS 客户端包装器的开销和复杂性,这里有一个提示,您不会这样做。

    【讨论】:

      【解决方案2】:

      冷静下来开始阅读吧。在介绍可运行代码之前,有一些简短的教程并没有竭尽全力解释理论。这还不错:http://java.sun.com/developer/technicalArticles/Ecommerce/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();
      

      【讨论】:

      • 感谢 Joni 带来清晰。我还有一个问题,两个不同网络服务器上的两个 java 应用程序如何处理同一个队列。正如您在示例中提到的 Queue queue=session.createQueue("MyQ​​ueue");这个队列对象实际上在哪里(我的意思是在生产者端或消费者端)以及两个服务器如何访问同一个队列?
      • 表示队列的对象存在于两边。队列本身由消息代理维护,它可能是在不同机器上运行的外部程序。 JMS 没有为连接到代理的客户端定义任何具体的有线协议,因此消费者和生产者如何访问队列取决于解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2010-11-14
      • 2013-03-12
      • 1970-01-01
      • 2014-05-01
      相关资源
      最近更新 更多