6.2. 发送消息


这个示例首先创建一个 JNDI Context,使用它查找 ConnectionFactoryDestination,使用工厂创建并启动 Connection,然后创建一个 Session。然后,MessageProducerDestination 创建,并使用它发送信息。然后 Connection 被关闭,程序会退出。

这个 Sender 示例的可运行变体位于 <source-dir>/qpid-jms-examples 目录中,以及之前在 第 3 章 入门 中的 Hello World 示例。

示例:发送消息

package org.jboss.amq.example;

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

public class Sender {
  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

      MessageProducer messageProducer = session.createProducer(destination); 5

      TextMessage message = session.createTextMessage("Message Text!"); 6
      messageProducer.send(message, DeliveryMode.NON_PERSISTENT,
                           Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE); 7

      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);
    }
  }
}

1
创建 JNDI Context 来查找 ConnectionFactoryDestination 对象。之前jndi.properties 文件中获取配置。
2
ConnectionFactory 和 Destination 对象使用它们的查找名称从 JNDI 上下文检索。
3
该工厂用于创建 Connection,然后注册 ExceptionListener,然后启动。创建连接时提供的凭据通常从适当的外部配置源获取,确保它们与应用本身保持独立,并可独立更新。
4
Connection 上创建一个未翻译的、自动确认的 Session
5
MessageProducer 创建用于发送信息到 Destination
6
使用给定内容创建一个 TextMessage
7
发送 TextMessage。它将以非持久性方式发送,具有默认优先级且没有过期。
8
Connection 已关闭。SessionMessageProducer 隐式关闭。

请注意,这只是一个示例。现实应用通常会使用长期存在的 MessageProducer,并随着时间推移发送多个消息。打开并关闭每个信息 ConnectionSessionMessageProducer 通常不高效。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.