今天和大家分享一下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、一启动发邮件系统,就会加载配置文件,启动监听器,监听器去获取目标队列里的消息进行响应
楼主今天的分享就到此结束了,欢迎大家随时来交流。