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 常见面试问题

51. Spring ActiveMQ 示例

这是springactivemq示例教程的第二部分。请转到第一部分Spring AMQP ActiveMQ教程.

SpringActiveMQ示例

在这个springactivemq示例文章中,我们将有以下部分。

  • 介绍
  • 用ActiveMQ开发消息传递应用程序
  • 为-ActiveMQ消息传递应用开发测试客户机
  • 用ActiveMQ测试消息传递应用程序

介绍

在我之前的文章中,我们已经讨论了一些基础知识和如何安装和设置ActiveMQ服务器。请参考以下内容:

  • SpringAMQP基础知识
  • 如何安装和设置服务器
  • -ActiveMQ消息传递示例(第1部分)

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

用ActiveMQ开发消息传递应用程序

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

请按以下步骤逐一进行:

  • 开发springactivemqamqp发布程序
  • 
    package com.tp.jms.activemq;
    
    import javax.annotation.PostConstruct;
    import javax.jms.*;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;
    import org.springframework.stereotype.Component;
    @Component
    public class ActiveMQMessageProducer {
        protected static final String MSG_COUNT = "messageCount";
        @Autowired
        private JmsTemplate jmsTemplate = null;
    
        @PostConstruct
        public void generateMessages() throws JMSException 
        {
            for (int messageCount = 0; messageCount < 10; messageCount++) 
            {
                final String text = "TP Message " + messageCount;
                jmsTemplate.send(new MessageCreator() 
                {
                    public Message createMessage(Session session) throws JMSException
                    {
                        TextMessage textMessage = session.createTextMessage(text);
                        textMessage.setIntProperty(MSG_COUNT, messageCount);              
                        return textMessage;
                    }
                });
            }
        }
    }
    
  • 使用springjmsapismdps开发JMS异步JMS使用者。
  • 
    package com.tp.jms.activemq;
    
    import java.util.concurrent.atomic.AtomicInteger;
    import javax.jms.*;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ActiveMQMessageListener implements MessageListener 
    { 
        @Autowired
        private AtomicInteger count = null;
        public void onMessage(Message message)
        {
            try 
            {   
                if (message instanceof TextMessage) 
                {
                    TextMessage txtMsg = (TextMessage)message;
                    System.out.println("Received message from Destination : " +
                                                          txtMsg.getText());				
                    count.incrementAndGet();
                }
            } 
            catch (JMSException e) { }
        }
    
    }
    
  • 最终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>simple-jms</artifactId>
        <version>1.0.2</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>
    	<activemq.version>5.2.0</activemq.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>
    		 <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</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> 
    	
    	<!-- ActiveMQ -->
    	<dependency>
               <groupId>org.apache.activemq</groupId>
               <artifactId>activemq-core</artifactId>
               <version>${activemq.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-optional</artifactId>
                <version>${activemq.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.xbean</groupId>
                <artifactId>xbean-spring</artifactId>
                <version>3.7</version>
            </dependency>
            
           <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${org.springframework-version}</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>
    

为-ActiveMQ消息传递应用开发测试客户机

  • 开发测试应用程序
  • 
    package com.tp.jms.activemq;
    import static org.junit.Assert.*;
    import java.util.concurrent.atomic.AtomicInteger;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration
    public class ActiveMQJmsMessageListenerTest {
        @Autowired
        private AtomicInteger count = null;    
        @Test
        public void testMessage() throws Exception {
            assertEquals(10, count.get());
        }    
    }
    

    注:-由于此单元测试名称为ActiveMQJmsMessageListenerTest,因此@ContextConfiguration注解将搜索ActiveMQJmsMessageListenerTest-上下文.xml文件在相同的包结构中。

  • 最终项目结构
  • 这里我们可以看到-ActiveMQ消息传递应用程序和最终的Eclipse项目结构。

用ActiveMQ测试消息传递应用程序

在本节中,我们将使用上一节开发的测试客户机测试-ActiveMQ消息传递应用程序。

  • 遵守上述测试程序。我们使用断言概念来测试消息计数
  • 
    assertEquals(10, count.get());
    

    如果发布的消息和使用的消息不相等,则下面的消息不会抛出AssertError。

  • 运行设备并查看成功消息。
  • 右键单击测试程序并将其作为Junit测试运行。

  • 要在ActiveMQ管理控制台中查看消息,请在XML文件中注解侦听器配置
  • 
    <jms:listener-container container-type="default" 
           connection-factory="consumerJmsConnectionFactory" acknowledge="auto">
    	 <jms:listener destination="jms/TPActiveMQQueue" 
    	               ref="activeMQMessageListener" />
    </jms:listener-container>
    

    再次运行测试类并观察ActiveMQ管理控制台的10条消息:

  • 再次运行测试类并观察ActiveMQ管理控制台的10条消息:
  • 单元测试将失败,因为我们不使用任何消息。但这很好,因为我们需要在ActiveMQ队列中查看消息。

这就是开发-ActiveMQ消息传递示例的全部内容。