amqp rabbitmq
Today we will look into Spring AMQP RabbitMQ example application. We have already discussed some “Spring AMQP Basics Theoretically” and “How to install and setup RabbitMQ Server” in my previous posts. Please refer them in the following:
今天,我们将研究Spring AMQP RabbitMQ示例应用程序。 在之前的文章中,我们已经讨论了“ Spring AMQP基础知识”和“如何安装和设置RabbitMQ Server”。 请参考以下内容:
In this post, we are going to develop a Spring AMQP RabbitMQ Messaging application. Let us start it now.
在本文中,我们将开发一个Spring AMQP RabbitMQ Messaging应用程序。 让我们现在开始。
Spring AMQP RabbitMQ示例 (Spring AMQP RabbitMQ Example)
Let us start developing a Spring AMQP RabbitMQ Messaging application using Maven, Eclipse IDE and RabbitMQ Server. It is same for all other Java IDEs.
让我们开始使用Maven,Eclipse IDE和RabbitMQ Server开发Spring AMQP RabbitMQ Messaging应用程序。 对于所有其他Java IDE都是一样的。
Please do the following the steps one by one:
请一一执行以下步骤:
- Create a Maven Java project in Eclipse IDE 在Eclipse IDE中创建Maven Java项目
- Develop Spring AMQP Publisher program 开发Spring AMQP Publisher程序
package com.tp.spring.amqp.rabbit; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringAMQPRabbitSender { private final String SENDER_XML = "springamqp-rabbit-sender-context.xml"; public static void main(String[] args) throws Exception { AmqpTemplate amqpTemplate = (AmqpTemplate)(new ClassPathXmlApplicationContext(SENDER_XML)).getBean("amqpTemplate"); int messagCount = 0; while (messagCount < 10){ amqpTemplate.convertAndSend("tp.routingkey.1", "Message # " + messagCount++); } System.out.println( messagCount + " message(s) sent successfully."); } }
- Configure Spring AMQP Publisher required beans : springamqp-rabbit-sender-context.xml 配置Spring AMQP Publisher所需的bean:springamqp-rabbit-sender-context.xml
<?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:rabbit="https://www.springframework.org/schema/rabbit" xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-3.1.xsd https://www.springframework.org/schema/rabbit https://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd"> <rabbit:connection-factory id="connectionFactory" host="localhost" username="tpuser" password="tpuser"/> <rabbit:admin connection-factory="connectionFactory"/> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="tpExchange"/> </beans>
- Develop Spring AMQP Consumer(Spring MDP) program 开发Spring AMQP Consumer(Spring MDP)程序
package com.tp.spring.amqp.rabbit; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageListener; // Spirng MDP(Message Driven POJO) public class SpringAMQPRabbitAyncListener implements MessageListener { @Override public void onMessage(Message message) { System.out.println("Listener received message = " + new String(message.getBody())); } }
- Configure Spring AMQP Consumer required beans : springamqp-rabbt-listener-context.xml 配置Spring AMQP Consumer需要的bean:springamqp-rabbt-listener-context.xml
<?xmlversion="1.0"encoding="UTF-8"?> <beans xmlns="https://www.springframework.org/schema/beans" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="https://www.springframework.org/schema/rabbit" xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-3.1.xsd https://www.springframework.org/schema/rabbit https://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd"> <rabbit:connection-factory id="connectionFactory" host="localhost" username="tpuser" password="tpuser"/> <rabbit:admin connection-factory="connectionFactory"/> <rabbit:queue id="tpQueue"/> <rabbit:topic-exchange id="tpExchange" name="tpExchange"> <rabbit:bindings> <rabbit:binding queue="tpQueue" pattern="tp.routingkey.1"> </rabbit:binding> </rabbit:bindings> </rabbit:topic-exchange> <bean id="asyncListener" class="com.tp.spring.amqp.rabbit.SpringAMQPRabbitAyncListener"/> <rabbit:listener-container id="myListenerContainer" connection-factory="connectionFactory"> <rabbit:listener ref="asyncListener" queue-names="tpQueue"/> </rabbit:listener-container> </beans>
- Develop Spring AMQP Rabbit Container program to initialize Spring IOC Container 开发Spring AMQP Rabbit Container程序以初始化Spring IOC Container
package com.tp.spring.amqp.rabbit; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SpringAMQPRabbitlListenerContainer { public static void main(String[] args) { // Initialize Spring IOC Container new ClassPathXmlApplicationContext("springamqp-rabbt-listener-context.xml"); } }
- Final pom.xml file 最终的pom.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tp</groupId> <artifactId>spring-amqp-rabbitmq</artifactId> <name>spring-amqp-rabbitmq</name> <packaging>jar</packaging> <version>1.0.0</version> <properties> <java-version>1.6</java-version> <org.springframework-version>3.1.1.RELEASE</org.springframework-version> <org.aspectj-version>1.6.10</org.aspectj-version> <org.slf4j-version>1.6.6</org.slf4j-version> </properties> <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> <exclusions> <!-- Exclude Commons Logging in favor of SLF4j --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency> <!-- AspectJ --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${org.aspectj-version}</version> </dependency> <!-- Logging --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${org.slf4j-version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${org.slf4j-version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${org.slf4j-version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <exclusions> <exclusion> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> </exclusion> <exclusion> <groupId>javax.jms</groupId> <artifactId>jms</artifactId> </exclusion> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> </exclusions> <scope>runtime</scope> </dependency> <!-- @Inject --> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency> <!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-amqp</artifactId> <version>1.1.4.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-eclipse-plugin</artifactId> <version>2.9</version> <configuration> <additionalProjectnatures> <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> </additionalProjectnatures> <additionalBuildcommands> <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> </additionalBuildcommands> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.6</source> <target>1.6</target> <compilerArgument>-Xlint:all</compilerArgument> <showWarnings>true</showWarnings> <showDeprecation>true</showDeprecation> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <mainClass>org.test.int1.Main</mainClass> </configuration> </plugin> </plugins> </build> </project>
- Our Final Maven Project Structure 我们最终的Maven项目结构
使用RabbitMQ服务器测试Spring AMQP RabbitMQ示例 (Test Spring AMQP RabbitMQ Example with RabbitMQ Server)
- Run AMQP Publisher and observe messages in RabbitMQ Queue 运行AMQP Publisher并观察RabbitMQ队列中的消息
Here we can see that AMQP Publisher sent 10 messages successfully.
在这里我们可以看到AMQP Publisher成功发送了10条消息。
- RabbitMQ console is showing 10 messages in the queue RabbitMQ控制台在队列中显示10条消息
Here we can see that our RabbitMQ queue has received 10 messages successfully from AMQP Publisher.
在这里,我们可以看到RabbitMQ队列已成功从AMQP Publisher接收到10条消息。
- Run AMQP Consumer and observe messages in Eclipse IDE 运行AMQP Consumer,并在Eclipse IDE中观察消息
Here we can see that AMQP Consumer receives each message one by one from RabbitMQ queue.
在这里,我们可以看到AMQP消费者从RabbitMQ队列中逐条接收每个消息。
- RabbitMQ console is showing 0 messages in the queue RabbitMQ控制台在队列中显示0条消息
Here we can observe that RabbitMQ queue has 0 messages that means AMQP Consumer has received all messages successfully.
在这里我们可以观察到RabbitMQ队列中有0条消息,这意味着AMQP消费者已成功接收了所有消息。
NOTE: With this knowledge of Spring AMQP RabbitMQ Messaging, you can read more about Spring AMQP API and learn new things. And also go through RabbitMQ Server documentation to get more details about Exchanges, Queues etc.
注意:有了Spring AMQP RabbitMQ消息的知识,您可以阅读有关Spring AMQP API的更多信息并学习新知识。 并仔细阅读RabbitMQ Server文档以获取有关Exchange,队列等的更多详细信息。
NOTE: As I told you in my previous post, both Spring AMQP API and RabbitMQ Server are from The Pivotal Team.
注意:正如我在上一篇文章中告诉您的那样,Spring AMQP API和RabbitMQ Server均来自The Pivotal Team 。
That’s it all about developing Spring AMQP RabbitMQ Messaging Example. We will discuss and develop Spring AMQP ActiveMQ Messaging Example in my coming posts.
这就是开发Spring AMQP RabbitMQ消息传递示例的全部内容。 我们将在我的后续文章中讨论和开发Spring AMQP ActiveMQ消息传递示例。
Further Reading: Apache ActiveMQ.
进一步阅读: Apache ActiveMQ 。
翻译自: https://www.journaldev.com/11713/spring-amqp-rabbitmq-example
amqp rabbitmq