如有不懂请联系楼主或者加群725395843 这里是技术讨论群。供大家讨论。
简介:
消息中间件有很多,常见的比如redis、ActivitiMq、rabbitmq、还有就是阿里的RocketMQ,kafka等吧,今天我们主要是尝试一波ActivitiMq,老铁,上车啦!!!
一、入门(环境的搭建)
首先下载activitimq,官网在这里->http://activemq.apache.org/,选择自己喜欢的版本(楼主用的是5.7.0),解压就可以用啦,
打开解压缩后的文件,点击activemq.bat,浏览器输入->http://localhost:8161/admin,就可以看到你期待已久的界面了,如果需要密码,默认的用户名和密码是admin,如果你想修改密码,跟我来->apache-activemq-5.7.0\conf\jetty.xml,修改<property name="authenticate" value="true" />,然后去->apache-activemq-5.7.0\conf\jetty-realm.properties,修改用户名和密码,默认是这样的admin: admin, admin(用户名:密码:角色),恭喜入门。哇哇哇!!!(这里是windows的 linux安装后续在进行讲解。)
注意:windows 启动的方式有两种 1.直接启动 2 通过服务启动
进入你安装的文件下进去bin 目录下
根据你计算机的版本 选择进入是64位的还是32位的,楼主的是64位的。所以以64位的为准。进入以后如图。
到这里开始讲解启动的方式
(1) 直接启动。
直接右键启动(注意最好以管理员方式运行),这中启动方式如果把启动的页面关了服务就停下了,如果想永久启动那么就要通过服务的方式启动也就是我下面说的第二种启动方式(一会讲解),启动成功如图
(2)服务启动:
服务启动的方式也很简单,当你第一次启动以后就会把mq加载到你计算机的服务中去,每次你的计算机启动以后mq就会自动启动。启动方式如图。
启动成功以后你可以在你的计算机服务中看到。这里不做详细解释。
二、使用场景
说个大概吧,一般比如说购物网站高峰期的时候,用户提交订单后,先把订单信息放入消息队列中,避免了去数据库存取,因为放入内存中执行速度远远大过磁盘,处理订单模块去消息队列中处理成功后返回。好了,其他的自己摸索吧!!!
三、具体使用
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-broker -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-broker</artifactId>
<version>5.10.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-client -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.14.0</version>
</dependency>
消息发送端:
package com.sinosoft.activiMq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnectionFactory;
public class AppProducer {
private static final String url ="tcp://127.0.0.1:61616";//默认端口
private static final String queueName = "queue-test";
private static final String topicName = "topic-test";
public static void main(String[] args) throws JMSException {
queue();
}
//队列模式下
public static void queue() throws JMSException{
//创建active 链接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
//创建链接
Connection connection = connectionFactory.createConnection();
//启动链接
connection.start();
//创建session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建目标
Destination destination = session.createQueue(queueName);
//创建生产者 向目标发送消息
MessageProducer messageProducer = session.createProducer(destination);
for (int i = 0; i < 3; i++) {
//创建消息
TextMessage textMessage =session.createTextMessage("test"+i);
messageProducer.send(textMessage);
System.out.println("发送消息成功"+textMessage.getText());
}
//关闭链接
connection.close();
}
//主题模式
public static void themePattern()throws JMSException{
//创建active 链接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
//创建链接
Connection connection = connectionFactory.createConnection();
//启动链接
connection.start();
//创建session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建目标
Destination destination = session.createTopic(topicName);
//创建生产者 向目标发送消息
MessageProducer messageProducer = session.createProducer(destination);
for (int i = 0; i < 100; i++) {
//创建消息
TextMessage textMessage =session.createTextMessage("test"+i);
messageProducer.send(textMessage);
System.out.println("发送消息成功"+textMessage.getText());
}
//关闭链接
connection.close();
}
}
消息接收端:
package com.sinosoft.activiMq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnectionFactory;
//消费者
public class AppConsumer {
private static final String url ="tcp://127.0.0.1:61616";//默认端口
private static final String queueName = "queue-test";
private static final String topicName = "topic-test";
public static void main(String[] args) throws JMSException {
}
public static void queueConsumer() throws JMSException {
//创建active 链接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
//创建链接
Connection connection = connectionFactory.createConnection();
//启动链接
connection.start();
//创建session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建目标
Destination destination = session.createQueue(queueName);
//创建一个消费者
MessageConsumer messageConsumer = session.createConsumer(destination);
//创建一个监听器
messageConsumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage =(TextMessage) message;
try {
System.out.println("接收消息"+textMessage.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//关闭链接
//connection.close();
}
public static void themePatternConsumer() throws JMSException{
//创建active 链接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
//创建链接
Connection connection = connectionFactory.createConnection();
//启动链接
connection.start();
//创建session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建目标
Destination destination = session.createTopic(topicName);
//创建一个消费者
MessageConsumer messageConsumer = session.createConsumer(destination);
//创建一个监听器
messageConsumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage =(TextMessage) message;
try {
System.out.println("接收消息"+textMessage.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//关闭链接
//connection.close();
}
}