JMS API 1.1生产者和使用者

时间:2020-02-23 14:35:21  来源:igfitidea点击:

在开始开发JMS程序之前,首先我们将在本文中讨论以下两个概念:

  • 开发JMS生产者的步骤
  • 开发JMS使用者的步骤

介绍

在P2P或者发布/订阅消息传递模型中,我们可以观察到以下参与者:

  • JMS生产者
  • JMS消费者
  • JMS消息
  • JMS管理的对象
  • JMS提供者

根据我们的应用程序或者客户需求,我们可以使用任何可用的JMS Provider来实现此Messaging Application。
JMS管理员在JMS Provider管理控制台中配置所有必需的受管理对象,以在我们的应用程序中使用它们。

因此,作为JMS开发人员,我们需要专注于3个部分:生产者,消费者和消息。

注意:-阅读本节后,请参阅" Simple JMS V.1.1示例"部分,以获取JMS 1.1的简单工作示例。

JMS API 1.1生产者

开发JMS V.1.1 Producer的步骤:

生产者或者发送者的责任是创建消息并将其发送到目的地。
要开发Producer应用程序,我们需要按以下顺序创建一组对象。

  • 安装JMS Provider软件
  • 使用管理控制台并在JMS提供程序中创建受管理对象

ConnectionFactory JNDI名称:jms/SampleConnectionFactory目标(队列)JNDI名称:jms/SampleQueue

  • 开发JMS Producer应用程序

创建InitialContext

Context context = new InitialContext ();

使用InitialContext对象从JNDI存储库中查找ConnectionFactory对象

ConnectionFactory cf = (ConnectionFactory) 
context.lookup ("jms/SampleConnectionFactory");

使用InitialContext对象从JNDI存储库中查找目标对象

Destination queue = (Destination) context.lookup ("jms/SampleQueue");

使用ConnectionFactory对象并创建Connection对象

Connection connection = cf.createConnection ();

使用连接对象并创建会话对象

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

使用会话和目标对象并创建生产者对象

MessageProducer producer = session.createProducer(queue);

使用会话并创建示例TextMessage

TextMessage txtMsg = 
 session.createTextMessage ("Sample P2P Queue TextMessage");

使用生产者对象将TextMessage发送到目标

producer.send (message);

关闭创建的Connection对象以释放所有资源。

connection.close();

JMS API 1.1使用者

消费者或者接收者的责任是消费者从目的地接收消息。
要开发消费者应用程序,我们需要按以下顺序创建一组对象:

如果我们观察到创建对象的顺序以消耗一条消息,那么我们将遵循几乎类似的Producer步骤。

  • 安装JMS Provider软件
  • 使用管理控制台并在JMS提供程序ConnectionFactory JNDI中创建受管理对象JNDI名称:jms/SampleConnectionFactory目标(队列)JNDI名称:jms/SampleQueue
  • 开发JMS Producer应用程序

创建InitialContext

Context context = new InitialContext ();

使用InitialContext对象从JNDI存储库中查找ConnectionFactory对象

ConnectionFactory cf = ConnectionFactory) 
  context.lookup ("jms/SampleConnectionFactory");

使用InitialContext对象从JNDI存储库中查找目标对象

Destination queue = (Destination) context.lookup ("jms/SampleQueue");

使用ConnectionFactory对象并创建Connection对象

Connection connection = cf.createConnection ();

使用连接对象并创建会话对象

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

使用会话和目标对象并创建生产者对象

MessageConsumerconsumer = session.createConsumer(queue);

启动连接以使用来自目标的消息。

connection.start();

注意:

  • 在使用者端需要进行connection.start()方法调用,而在生产者端则不需要。

  • 当Producer调用send()方法时,它将自动开始Producer与消息传递提供程序(如JBoss)之间的连接。

  • 消费者应调用connection.start()方法,因为消费者应告知消息传递提供者说他们已准备好接收或者使用消息。

  • 在使用者通过调用其start()方法启动连接之前,不会开始从JMS提供程序到使用者的消息传递。

  • 忘记进行Connection.start()方法调用是JMS编程的主要错误之一。

使用Consumer对象从目标接收消息(例如,生产者发送的TextMessage。
)

TextMessage message = (TextMessage) consumer.receive();

关闭创建的Connection对象以释放所有资源。

connection.close();

注意:

  • 当我们使用队列作为目的地时,这两个生产者和消费者组件是P2P消息传递模型的一部分。

  • 要为发布/订阅消息模型开发相同类型的应用程序,则JMS管理员将在JMS提供者中创建主题,而开发人员应在生产者和消费者程序中使用该主题JNDI名称。
    因为,JMS 1.1 Classic API仅使用一组API来开发Producer和Consumer程序。