Spring 框架入门教程
1. 1. Spring 框架 2. 2. Spring 5 3. 3. Spring WebFlux 4. 4. 先介绍一下 Spring 5. 5. 什么是 Spring 依赖注入 6. 6. 什么是 Spring IoC 容器 和 Bean 7. 7. Spring Bean 的生命周期 8. 8. Spring REST 开发 9. 9. Spring REST XML 10. 10. Spring RestTemplate 开发 11. 11. Spring AOP 切面编程 12. 12. Spring AOP 方法调优 13. 13. Spring 注解详解 14. 14. Spring 核心注解之 @Autowired 15. 15. Spring 核心注解之 @RequestMapping 16. 16. Spring MVC 开发样例 17. 17. Spring MVC 开发指南 18. 18. Spring MVC 异常处理机制 19. 19. Spring MVC Validator 20. 20. Spring MVC 拦截器 21. 21. Spring MVC 文件上传 22. 22. Spring MVC 国际化(i18n) 23. 23. Spring MVC Hibernate MqSQL 24. 24. Spring ORM 25. 25. Spring ORM JPA 26. 26. Spring Data JPA 27. 27. Spring 事务管理 28. 28. 常用的 Spring JdbcTemplate 29. 29. Spring Security 简介 30. 30. Spring Security 教程 31. 31. Spring Security UserDetailsService 32. 32. Spring MVC 登录注销简单案例 33. 33. Spring Security Roles 34. 34. Spring Boot Tutorial 35. 35. Spring Boot Components 36. 36. Spring Boot CLI Hello World 37. 37. Spring Boot Initilizr Web 38. 38. Spring Boot Initilizr IDE 39. 39. Spring Boot Initilizr CLI 40. 40. Spring Boot Initilizr Tools 41. 41. Spring Boot MongoDB 42. 42. Spring Boot Redis Cache 43. 43. Spring Boot 常见面试问题 44. 44. Spring Batch 45. 45. Spring Batch 批处理示例 46. 46. Spring AMQP 47. 47. Spring RabbitMQ 48. 48. Spring AMQP RabbitMQ 49. 49. Apache ActiveMQ 安装与启动 50. 50. Spring ActiveMQ 教程 51. 51. Spring ActiveMQ 示例 52. 52. Spring JDBC 53. 53. Spring DataSource JNDI 54. 54. Spring Hibernate 55. 55. Spring Primefaces JPA 56. 56. Spring Primefaces MongoDB 57. 57. Spring Primefaces Hibernate 58. 58. SpringRoo Primefaces Hibernate 59. 59. Spring JSF 60. 60. Spring JDF Hibernate 61. 61. Spring Data MongoDB 62. 62. Spring 常见面试问题

48. Spring AMQP RabbitMQ

今天我们将研究 RabbitMQ示例应用程序。在我之前的文章中,我们已经从理论上讨论了一些基础知识,以及如何安装和设置RabbitMQ服务器。请参考以下内容:

  • SpringAMQP
  • 春兔MQ

在本文中,我们将开发一个-RabbitMQ消息传递应用程序。我们现在就开始吧。

Spring AMQP RabbitMQ示例

让我们开始使用Maven、eclipseide和RabbitMQ服务器开发 RabbitMQ消息传递应用程序。对于所有其他javaide也是一样的。

请按以下步骤逐一进行:

  1. 在eclipseide中创建Maven Java项目
  2. 开发发布程序
  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 = "-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. 配置 Publisher所需的bean: rabbit sender-上下文.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. 开发消费者(springmdp)计划
  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. 配置使用者所需的bean: rabbt侦听器-上下文.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"/>
    	<rabbit:listener-container id="myListenerContainer" connection-factory="connectionFactory">
    		<rabbit:listener ref="asyncListener" queue-names="tpQueue"/>
    	</rabbit:listener-container>
    
    </beans>
    
  10. 开发兔子容器程序来初始化Spring Ioc容器
  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("-rabbt-listener-context.xml");
    	}
    }
    
  12. 最终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. 我们最终的Maven项目结构

用RabbitMQ服务器测试 RabbitMQ示例

  1. 运行AMQP Publisher并观察RabbitMQ队列中的消息
  2. 在这里我们可以看到AMQP Publisher成功地发送了10条消息。

  3. RabbitMQ控制台在队列中显示10条消息
  4. 在这里我们可以看到,我们的RabbitMQ队列已经成功地从AMQP发布服务器接收了10条消息。

  5. 运行AMQP消费者并观察eclipseide中的消息
  6. 这里我们可以看到,AMQP使用者从RabbitMQ队列一个接一个地接收每个消息。

  7. RabbitMQ控制台在队列中显示0条消息
  8. 在这里我们可以看到RabbitMQ队列有0条消息,这意味着AMQP消费者已成功地接收到所有消息。

注:有了rabitmq消息传递的知识,您可以阅读更多关于api并学习新东西。同时,还可以查看RabbitMQ服务器文档,以获得有关交换、队列等的更多详细信息。

注:正如我在上一篇文章中所说的,api和RabbitMQ服务器都来自关键团队.

这就是开发 RabbitMQ消息传递示例的全部内容。我们将在接下来的文章中讨论和开发-ActiveMQ消息传递示例。

进一步阅读:阿帕奇 ActiveMQ.