ActiveMQ:在Linux下安装以及和spring的整合实例

  今天和大家分享一下ActiveMQ的安装和使用!

    ActiveMQ(消息中间件),具体由JMS实现发送消息和接收消息。

          MQ(Message queue)消息队列

          JMS(Java Message Service)java消息服务         

                  使用:

                            1、连接工厂

                            2、建立连接

                            3、创建会话

                            4、目的地

 

一、linux下安装

官网下载地址:http://activemq.apache.org/activemq-5111-release.html

这里我们用的是5.11.1版本的,安装包楼主是放在 /usr/local下面,一些基本的Linux操作楼主这里就不详细介绍了

1、首先切换到root用户:su root

2、进入到local文件夹下,解压:tar -zxvf  apache-activemq-5.11.1-bin.tar.gz

3、这里我们解压完成之后可以直接启动,进入ActiveMQ文件夹的bin目录下

4、启动: ./activemq start,看到下图这个进程号就是启动成功了

     关闭:./activemq stop

5、关闭防火墙:systemctl status firewalld.service    --查看防火墙状态
                         systemctl stop firewalld.service      --关闭运行的防火墙
                         systemctl disable firewalld.service   --禁止防火墙服务器

6、到浏览器去访问,本机Linux ip地址+端口号,这里默认的端口号是8161

7、查看ip地址:   ip addr

这里进去的时候要输入用户名和密码,默认都是admin

 

Demo

百度网盘:https://pan.baidu.com/s/1Rw_KVHdZQvOhp6yUrfA6wA,提取码:012l

二、和sping的整合实例

这里我们用maven来创建项目;activemq-shop、activemq-email;一个消费系统,一个发邮件系统

消费系统消费后,就要发送消息到队列里去。
发邮件系统要设置一个监听器,只要队列里有消息就马上处理

1、pom.xml

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>

  <dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
  </dependency>

  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
  </dependency>

  <!-- spring -->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.4.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-oxm</artifactId>
    <version>4.3.4.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.3.4.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>4.3.4.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.3.4.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jms</artifactId>
    <version>4.3.4.RELEASE</version>
  </dependency>

  <!--ActiveMQ-->
  <dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>5.11.1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-pool</artifactId>
    <version>5.11.1</version>
  </dependency>


  <!-- xbean -->
  <dependency>
    <groupId>org.apache.xbean</groupId>
    <artifactId>xbean-spring</artifactId>
    <version>3.16</version>
  </dependency>

  <dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.3.1</version>
  </dependency>

</dependencies>

2、篇幅有限,关于maven项目的搭建和sping的基础配置楼主就不多赘述了

 

 

 activemq-shop:消费系统

 applicationContext-activemq.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.2.xsd
      ">

    <!-- 加载配置属性 -->
    <context:property-placeholder location="classpath:conf/resource.properties"/>

    <!-- mq连接工厂 -->
    <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="${activemq.brokerURL}"/>
        <property name="userName" value="${activemq.username}"/>
        <property name="password" value="${activemq.password}"/>
    </bean>

    <!-- jms连接工厂 -->
    <!-- 发送消息到mq,通过上一个连接工厂去连接mq -->
    <bean id="targetConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
        <property name="targetConnectionFactory" ref="connectionFactory"/>
    </bean>

    <!-- 建立连接 -->
    <!-- 此连接可以用来创建会话 -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="targetConnectionFactory"/>

        <!-- 目的地 -->
        <property name="defaultDestinationName" value="${activemq.queueName}"/>
    </bean>

</beans>

ShopServiceImpl

@Service("shopService")
public class ShopServiceImpl implements ShopService {
    //得到连接
    @Autowired
    private JmsTemplate jmsTemplate;

    @Override
    public String shop(final Double money) {
        System.out.println("此次消费:"+money);
        try{
            jmsTemplate.send(new MessageCreator() {

                //发送消息
                //由session发送
                public Message createMessage(Session session) throws JMSException {
                    return session.createTextMessage(money+"");
                }
            });
        }catch (Exception e){
            e.printStackTrace();
            return "fail";
        }
        return "success";
    }
}

 

activemq-email:发邮件系统

applicationContext-activemq.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.2.xsd
      ">

    <!-- 加载配置属性 -->
    <context:property-placeholder location="classpath:conf/resource.properties"/>

    <!-- mq连接工厂 -->
    <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="${activemq.brokerURL}"/>
        <property name="userName" value="${activemq.username}"/>
        <property name="password" value="${activemq.password}"/>
    </bean>

    <!-- jms连接工厂 -->
    <!-- 发送消息到mq,通过上一个连接工厂去连接mq -->
    <bean id="targetConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
        <property name="targetConnectionFactory" ref="connectionFactory"/>
    </bean>

    <!-- 建立连接 -->
    <!-- 此连接可以用来创建会话 -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="targetConnectionFactory"/>

        <!-- 目的地 -->
        <property name="defaultDestinationName" value="${activemq.queueName}"/>
    </bean>

    <!-- 设置目的地 -->
    <bean id="shop" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg>
            <value>${activemq.queueName}</value>
        </constructor-arg>
    </bean>

    <!-- 配置监听器 -->
    <bean id="emailSendListener" class="demo.listener.EmailSendListener"/>

    <!-- 监听器容器 -->
    <!-- 像一个开关,一但加载这个配置文件,就会启动这个监听器,监听器就会监听目的地,目的地有消息的话就会响应监听器-->
    <bean id="DefaultMessageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <!-- 连接工厂 -->
        <property name="connectionFactory" ref="targetConnectionFactory"/>
        <!-- 目的队列 -->
        <property name="destination" ref="shop"/>
        <!-- 自定义监听 -->
        <property name="messageListener" ref="emailSendListener"/>
    </bean>

</beans>

EmailServiceImpl.class

@Service("emailService")
public class EmailServiceImpl implements EmailService {
    @Override
    public String sendEmail(Double money) {
        System.out.println("邮件已发送,内容为,消费金额:"+money);
        return "success";
    }
}

EmailSendListener.class

/**
 * @author :wjh
 * @date :Created in 2019/4/1 10:49
 * @description:消息监听类
 */
public class EmailSendListener implements MessageListener {
    @Autowired
    private EmailService emailService;

    @Override
    public void onMessage(Message message) {
        //接收消息
        TextMessage textMessage = (TextMessage) message;
        try {
            Double money = Double.valueOf(textMessage.getText());
            emailService.sendEmail(money);
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

3、只开启消费系统的话,消费之后会把消息存进队列里面等待处理

 

 

 

4、一启动发邮件系统,就会加载配置文件,启动监听器,监听器去获取目标队列里的消息进行响应

 

 

 楼主今天的分享就到此结束了,欢迎大家随时来交流。

 

 

 

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值