6.3. 接收信息


本例首先创建一个 JNDI 上下文,使用它来查找 ConnectionFactoryDestination,使用工厂创建和启动 连接,然后创建一个 Session。然后,为 Destination 创建一个 MessageConsumer,使用它收到一条消息,其内容会输出到控制台。然后,连接关闭,程序会退出。相同的 JNDI 配置与 发送示例 中相同

Receiver 示例的一个可执行变体包含在客户端分发的示例目录中,以及之前在 第 3 章 开始使用 中涵盖的 Hello World 示例。

示例:接收信息

package org.jboss.amq.example;

import jakarta.jms.Connection;
import jakarta.jms.ConnectionFactory;
import jakarta.jms.Destination;
import jakarta.jms.ExceptionListener;
import jakarta.jms.JMSException;
import jakarta.jms.Message;
import jakarta.jms.MessageConsumer;
import jakarta.jms.Session;
import jakarta.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

public class Receiver {
  public static void main(String[] args) throws Exception {
    try {
      Context context = new InitialContext(); 
1


      ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup");
      Destination destination = (Destination) context.lookup("myDestinationLookup"); 
2


      Connection connection = factory.createConnection("<username>", "<password>");
      connection.setExceptionListener(new MyExceptionListener());
      connection.start(); 
3


      Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
4


      MessageConsumer messageConsumer = session.createConsumer(destination); 
5


      Message message = messageConsumer.receive(5000); 
6


      if (message == null) { 
7

        System.out.println("A message was not received within given time.");
      } else {
        System.out.println("Received message: " + ((TextMessage) message).getText());
      }

      connection.close(); 
8

    } catch (Exception exp) {
      System.out.println("Caught exception, exiting.");
      exp.printStackTrace(System.out);
      System.exit(1);
    }
 }

  private static class MyExceptionListener implements ExceptionListener {
    @Override
    public void onException(JMSException exception) {
      System.out.println("Connection ExceptionListener fired, exiting.");
      exception.printStackTrace(System.out);
      System.exit(1);
    }
  }
}
Copy to Clipboard Toggle word wrap

1
创建 JNDI 上下文,以查找 ConnectionFactoryDestination 对象。该配置从 jndi.properties 文件中获取,如前面所述
2
ConnectionFactoryDestination 对象利用其查找名称从 JNDI 上下文 检索。
3
工厂用于创建 Connection,然后注册了 ExceptionListener,然后启动。创建连接时给出的凭证通常来自适当的外部配置源,确保它们与应用程序本身保持独立,并可独立更新。
4
在连接上创建了非转换的 自动确认 会话
5
创建 MessageConsumer 以接收来自 Destination 的信息。
6
发出对接收消息的调用,显示 5 秒超时。
7
检查结果,如果收到了消息,则其内容会被打印或注意没有收到消息。结果明确发送到 TextMessage,因为这是我们知道 发送者 发送的内容。
8
连接 关闭。SessionMessageConsumer 被隐式关闭。

请注意,这只是一个示例。现实应用通常使用长期的 MessageConsumer,并随着时间的推移接收许多消息。打开然后关闭每个消息 的连接、会话MessageConsumer 通常效率较低。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat