• ActiveMQ整合spring结合项目开发流程(生产者和消费者)总结


      1 一:生产者代码编写:
      2     1.配置pom.xml引入相关坐标
      3         <dependencies>
      4             <!-- spring开发测试 -->
      5             <dependency>
      6                 <groupId>junit</groupId>
      7                 <artifactId>junit</artifactId>
      8                 <version>4.12</version>
      9             </dependency>
     10             <dependency>
     11                 <groupId>org.springframework</groupId>
     12                 <artifactId>spring-core</artifactId>
     13                 <version>4.1.7.RELEASE</version>
     14             </dependency>
     15             <dependency>
     16                 <groupId>org.springframework</groupId>
     17                 <artifactId>spring-test</artifactId>
     18                 <version>4.1.7.RELEASE</version>
     19             </dependency>
     20             <!-- activemq -->
     21             <dependency>
     22                 <groupId>org.apache.activemq</groupId>
     23                 <artifactId>activemq-all</artifactId>
     24                 <version>5.14.0</version>
     25             </dependency>
     26             <!-- spring整合mq开发 -->
     27             <dependency>
     28                 <groupId>org.springframework</groupId>
     29                 <artifactId>spring-jms</artifactId>
     30                 <version>4.1.7.RELEASE</version>
     31             </dependency>
     32         </dependencies>
     33     2.配置applicationContext.xml文件
     34         <!-- ActiveMQ 连接工厂 -->
     35         <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
     36         <!-- 如果连接网络:tcp://ip:61616;未连接网络:tcp://localhost:61616 以及用户名,密码 -->
     37         <amq:connectionFactory id="amqConnectionFactory"
     38             brokerURL="tcp://localhost:61616" userName="admin" password="admin" />
     39         <!-- Spring Caching连接工厂 -->
     40         <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
     41         <bean id="connectionFactory"
     42             class="org.springframework.jms.connection.CachingConnectionFactory">
     43             <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
     44             <property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
     45             <!-- 同上,同理 -->
     46             <!-- <constructor-arg ref="amqConnectionFactory" /> -->
     47             <!-- Session缓存数量 -->
     48             <property name="sessionCacheSize" value="100" />
     49         </bean>
     50         <!-- 定义JmsTemplate的Queue类型 -->
     51         <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
     52             <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
     53             <constructor-arg ref="connectionFactory" />
     54             <!-- 非pub/sub模型(发布/订阅),即队列模式 -->
     55             <property name="pubSubDomain" value="false" />
     56         </bean>
     57         <!-- 定义JmsTemplate的Topic类型 -->
     58         <bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
     59             <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
     60             <constructor-arg ref="connectionFactory" />
     61             <!-- pub/sub模型(发布/订阅) -->
     62             <property name="pubSubDomain" value="true" />
     63         </bean>
     64     3.编写生产者类
     65         //注入JmsTemplate对象
     66         @Autowired
     67         private JmsTemplate jmsTemplate;
     68         //编写方法生产消息队列(使用map集合存放消息队列)
     69         jmsTemplate.send("activeCode",new MessageCreator() {
     70             
     71             @Override
     72             public Message createMessage(Session session) throws JMSException {
     73                 MapMessage map = session.createMapMessage();
     74                 map.setString("telephone", model.getTelephone());//消息之一
     75                 map.setString("randomCode", randomCode);//消息之二
     76                 return map;
     77             }
     78         });
     79 二:消费者代码编写:
     80     1.配置web.xml中的spring监听器
     81         <!-- spring配置文件位置 -->
     82         <context-param>
     83             <param-name>contextConfigLocation</param-name>
     84             <param-value>classpath:applicationContext.xml</param-value>
     85         </context-param>
     86         <!-- spring核心监听器 -->
     87         <listener>
     88             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     89         </listener>
     90     2.配置applicationContext.xml文件
     91             <!-- ActiveMQ 连接工厂 -->
     92             <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
     93             <!-- 如果连接网络:tcp://ip:61616;未连接网络:tcp://localhost:61616 以及用户名,密码 -->
     94             <amq:connectionFactory id="amqConnectionFactory"
     95                 brokerURL="tcp://localhost:61616" userName="admin" password="admin" />
     96             <!-- Spring Caching连接工厂 -->
     97             <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
     98             <bean id="connectionFactory"
     99                 class="org.springframework.jms.connection.CachingConnectionFactory">
    100                 <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
    101                 <property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
    102                 <!-- Session缓存数量 -->
    103                 <property name="sessionCacheSize" value="100" />
    104             </bean>
    105             <!-- 扫描消费者类所在的包 -->
    106             <context:component-scan base-package="cn.itcast.activemq.consumer" />
    107             <!-- 定义Queue监听器 -->
    108             <jms:listener-container destination-type="queue"
    109                 container-type="default" connection-factory="connectionFactory"
    110                 acknowledge="auto">
    111                 <jms:listener destination="生产者定义的消息名称" ref="消费者类名首字母小写即可" />
    112             </jms:listener-container>
    113             <!-- 定义Topic监听器 -->
    114             <jms:listener-container destination-type="topic"
    115                 container-type="default" connection-factory="connectionFactory"
    116                 acknowledge="auto">
    117                 <jms:listener destination="生产者定义的消息名称" ref="消费者类名首字母小写即可" />
    118             </jms:listener-container>
    119     3.编写消费者类
    120         @Servicer
    121         public class 消费者 implements MessageListener(){
    122             //实现MessageListener中的方法
    123             public void onMessage(Message message) {
    124                 MapMessage mapMessage = (TextMessage) message;
    125                 try {
    126                     System.out.println("消费者消费的信息为:手机号:" 
    127                     + mapMessage.getString("telephone")
    128                     +",验证码信息是:"+ mapMessage.getString("msg"));
    129                 } catch (JMSException e) {
    130                     e.printStackTrace();
    131                 }
    132             }
    133         }
    134     4.配置pom.xml中的tomcat启动坐标
    135         //引入和生产者相同的jar包的坐标文件
    136         //配置启动端口号为9009
    137          <build>
    138             <plugins>
    139                 <plugin>
    140                     <groupId>org.codehaus.mojo</groupId>
    141                     <artifactId>tomcat-maven-plugin</artifactId>
    142                     <version>1.1</version>
    143                     <configuration>
    144                         <port>9009</port>
    145                     </configuration>
    146                 </plugin>
    147             </plugins>
    148           </build>
    149           //最好继承其他的父项目中的pom.xml以免造成不可估量的错误
  • 相关阅读:
    python 可变数据类型&不可变数据类型
    java异常 总结
    java 进制转换
    在virtualbox下使用vm映像文件
    关于C语言中单双引号的问题
    php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
    fastadmin model关联模型 关联查询问题
    php 解决跨域问题
    微信支付相关
    TP5之事务处理
  • 原文地址:https://www.cnblogs.com/yshang/p/8080092.html
Copyright © 2020-2023  润新知