Spring AMQP ActiveMQ教程

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

欢迎使用Spring AMQP ActiveMQ教程。
之前,我们研究过安装Apache ActiveMQ服务器。
今天,我们将创建一个Spring应用程序以与ActiveMQ JMS队列一起使用。

介绍

在以前的文章中,我们已经从理论上讨论了一些" Spring AMQP基础知识"和"如何安装和设置ActiveMQ Server"。

在本文中,我们将讨论一些Apache ActiveMQ基础知识,然后讨论如何配置应用程序队列,然后进行一些Spring Framework AMQP和ActiveMQ API XML配置。

在本文和我的下一篇文章中,我们将使用队列(一对一消息传递应用程序)开发Spring AMQP ActiveMQ消息传递应用程序。
让我们现在开始。

SpringAMQP标签库

Spring框架提供了两种AMQP标签库,可与以下AMQP服务器配合使用:

  • RabbitMQ AMQP标签库

Spring RabbitMQ AMQP标签库用于使用Spring AMQP API和Spring RabbitMQ API为RabbitMQ Server开发消息应用程序。

Spring RabbitMQ AMQP标签库在" spring-rabbit.xsd"文件中定义。

  • ActiveMQ AMQP标签库

Spring ActiveMQ AMQP标签库用于使用Spring AMQP API和Apache ActiveMQ API为Apache ActiveMQ Server开发消息应用程序。

Spring RabbitMQ AMQP Tag Library is defined in "activemq-core.xsd"; file.

使用ActiveMQ开发和测试Spring AMQP的步骤

在本部分中,我将列出我们使用Apache ActiveMQ Server开发和测试Spring AMQP Messaging应用程序所需要做的所有步骤。
我们将在接下来的部分和后续的文章中以示例的方式深入讨论这些步骤。

请按照以下步骤使用Apache ActiveMQ Server开发和测试Spring AMQP Messaging应用程序。

  • 安装Apache ActiveMQ Server(请参阅ActiveMQ部分)
  • 在Eclipse中创建Mavenized Java项目
  • 为ActiveMQ创建Spring AMQP配置
  • 在ActiveMQ Server中创建JMS队列
  • 使用ActiveMQ开发Spring AMQP消息传递应用程序
  • 使用ActiveMQ测试Spring AMQP消息传递应用程序

这些是使用Apache ActiveMQ Server开发和测试Spring AMQP Messaging应用程序的简短步骤。
如果您对它们不太了解,请不要担心。
我们将在接下来的部分中逐一讨论这些步骤。

带有ActiveMQ的Spring AMQP的优点和缺点

在本节中,我们将讨论:与"带有RabbitMQ Server的Spring AMQP"组合相比,"带有ActiveMQ Server的Spring AMQP"组合的优缺点是什么?

"带有ActiveMQ的Spring AMQP"组合具有以下优点:

  • Apache ActiveMQ Server很好地支持XA事务。

  • 我们可以轻松地将Apache ActiveMQ MQ Broker嵌入到Java应用程序中。

  • 将"带有ActiveMQ应用程序的Spring AMQP"与Apache Camel集成非常容易。

即使"带有ActiveMQ的Spring AMQP"组合具有很多好处,它也有一个主要缺点:

  • ActiveMQ需要更多内存来维护应用程序。

在ActiveMQ Server中创建JMS队列

  • 使用新的ActiveMQ管理控制台创建JMS队列
  • 单击" +创建"按钮,提供详细信息,然后单击"创建队列"按钮
  • 点击"浏览"按钮查看消息

为ActiveMQ创建Spring AMQP配置

  • 为ActiveMQ服务器配置Spring AMQP XML配置

通过提供ActiveMQ提供程序URL配置JMS连接工厂

<amq:connectionFactory id="jmsFactory" brokerURL="tcp://localhost:61616" 

URL中包含协议,主机名和端口号。
默认情况下,此应用需要tcp协议。
主机名是localhost。
我们正在使用默认端口号61616。

  • 配置目标(此处使用队列)
<amq:queue id="destination" physicalName="jms/TPActiveMQQueue" 
  • 使用Spring JMS API的SingleConnectionFactory声明Producer连接工厂
<bean id="jmsProducerConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
	<property name="targetConnectionFactory" ref="jmsFactory" 
</bean>
  • 使用Spring JMS API的SingleConnectionFactory声明消费者连接工厂
<bean id="jmsConsumerConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
	<property name="targetConnectionFactory" ref="jmsFactory" 
</bean>

注意:-生产者和使用者都应引用先前创建的JMS Factory对象,如上面的Spring AMQP XML配置所示。

  • 为JMS Producer配置Spring JmsTemplate以将消息发送到Destination
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
	<property name="connectionFactory" ref="producerJmsConnectionFactory" 
	<property name="defaultDestination" ref="destination" 
</bean>
  • 配置JMS侦听器以使用消息
<jms:listener-container container-type="default" connection-factory="consumerJmsConnectionFactory" acknowledge="auto">
<jms:listener destination="jms/TPActiveMQQueue" ref="activeMQMessageListener" 
</jms:listener-container>
  • 完整的Spring配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
     xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
     xmlns:context="https://www.springframework.org/schema/context"
     xmlns:jms="https://www.springframework.org/schema/jms"
     xmlns:amq="https://activemq.apache.org/schema/core"
     xsi:schemaLocation="https://www.springframework.org/schema/beans 
     https://www.springframework.org/schema/beans/spring-beans.xsd
     https://www.springframework.org/schema/context 
     https://www.springframework.org/schema/context/spring-context.xsd
     https://www.springframework.org/schema/jms 
     https://www.springframework.org/schema/jms/spring-jms.xsd
     https://activemq.apache.org/schema/core 
     https://activemq.apache.org/schema/core/activemq-core.xsd">

<context:component-scan base-package="com.tp.jms.activemq" 
<amq:connectionFactory id="jmsFactory" brokerURL="tcp://localhost:61616" 
<amq:queue id="destination" physicalName="jms/TPActiveMQQueue" 

<bean id="producerJmsConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
	<property name="targetConnectionFactory" ref="jmsFactory" 
</bean>

<bean id="consumerJmsConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
	<property name="targetConnectionFactory" ref="jmsFactory" 
</bean>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
	<property name="connectionFactory" ref="producerJmsConnectionFactory" 
	<property name="defaultDestination" ref="destination" 
</bean>

<jms:listener-container container-type="default" connection-factory="consumerJmsConnectionFactory" acknowledge="auto">
<jms:listener destination="jms/TPActiveMQQueue" ref="activeMQMessageListener" 
</jms:listener-container>

<bean id="counter" class="java.util.concurrent.atomic.AtomicInteger"
</beans>