amqp rabbitmq_Spring AMQP RabbitMQ示例

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:

请一一执行以下步骤:

  1. Create a Maven Java project in Eclipse IDE

    在Eclipse IDE中创建Maven Java项目
  2. Develop Spring AMQP Publisher program

    开发Spring AMQP Publisher程序
  3. 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.");
    	}
    }
  4. Configure Spring AMQP Publisher required beans : springamqp-rabbit-sender-context.xml

    配置Spring AMQP Publisher所需的bean:s​​pringamqp-rabbit-sender-context.xml
  5. <?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>
  6. Develop Spring AMQP Consumer(Spring MDP) program

    开发Spring AMQP Consumer(Spring MDP)程序
  7. 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()));
    	}
    }
  8. Configure Spring AMQP Consumer required beans : springamqp-rabbt-listener-context.xml

    配置Spring AMQP Consumer需要的bean:s​​pringamqp-rabbt-listener-context.xml
  9. <?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>
  10. Develop Spring AMQP Rabbit Container program to initialize Spring IOC Container

    开发Spring AMQP Rabbit Container程序以初始化Spring IOC Container
  11. 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");
    	}
    }
  12. Final pom.xml file

    最终的pom.xml文件
  13. <?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>
  14. Our Final Maven Project Structure

    我们最终的Maven项目结构

使用RabbitMQ服务器测试Spring AMQP RabbitMQ示例 (Test Spring AMQP RabbitMQ Example with RabbitMQ Server)

  1. Run AMQP Publisher and observe messages in RabbitMQ Queue

    运行AMQP Publisher并观察RabbitMQ队列中的消息
  2. Here we can see that AMQP Publisher sent 10 messages successfully.

    在这里我们可以看到AMQP Publisher成功发送了10条消息。

  3. RabbitMQ console is showing 10 messages in the queue

    RabbitMQ控制台在队列中显示10条消息
  4. Here we can see that our RabbitMQ queue has received 10 messages successfully from AMQP Publisher.

    在这里,我们可以看到RabbitMQ队列已成功从AMQP Publisher接收到10条消息。

  5. Run AMQP Consumer and observe messages in Eclipse IDE

    运行AMQP Consumer,并在Eclipse IDE中观察消息
  6. Here we can see that AMQP Consumer receives each message one by one from RabbitMQ queue.

    在这里,我们可以看到AMQP消费者从RabbitMQ队列中逐条接收每个消息。

  7. RabbitMQ console is showing 0 messages in the queue

    RabbitMQ控制台在队列中显示0条消息
  8. 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值