目录
大家好我是爱学习的张三,今天我们来简单的学习一下ActiveMQ消息队列
首先来啰嗦一下activemq是什么东西
ActiveMQ是Apache出品,最流行的,能力最强劲的开源消息总线,是一个完全支持JMS和J2EE规范的JMS Provider实现
可以说ActiveMQ是在业界应用最广泛,当然想要有更强大的性能和海量数据处理能力,ActiveMQ还需不断的升级,很多业务ActiveM都能满足我们的业务需求,如天猫,淘宝等等 另外ActiveMQ也是RocketMQ的核心 后续我也会将一下RocketMQ,请密切关注小三的博客.
说完了ActiveMQ的简单讲解,那就要说一下JMS了,给各位不知道的小伙伴们扫扫盲, JMS是实现了JMS接口的消息中间件,那么我们就来看看JMS中的一些关键词,帮助我们更好的学习ActiveMQ,因为ActiveMQ也是实现了JMS规范的消息中间件
Provider(MessageProvider):生产者
Consumer(MessageConsumer):消费者
PTP: Point to Point 即点对点的消息模型
Pub/Sub: Publish/Subscribe , 即发布/订阅的消息模型
Queue:队列目标
Topic:主题目标
ConnectionFactory: 连接工厂,JMS用它创建链接
Connection : JMS 客户端链接到JMS Provider的链接
Sestination: 消息的目的地;
Session:回话,一个发送或者接收消息的线程
步骤一:安装ActiveMQ 小伙伴们可以在官网下载即可 如图
步骤二:启动apache-activemq-5.11.1\bin\win64\activemq.bat 这是Windows下的启动 看到下图就是启动成功,可以在浏览器上输入http://127.0.0.1:8161/admin 查看是否启动成功 默认用户名和密码都是admin 默认端口是8161 可以在conf下的配置文件中修改
3:生产者代码
// 1 建立ConnectionFactory工厂对象 需要输入用户名 密码 以及连接的地址 具使用默认即可 默认的端口为
// tcp://localhost:61616
/*ConnectionFactory connFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD, "tcp://localhost:61616");*///这是加了权限配置 默认使用上面的ConnectionFactory 权限配置看文章最后说明
ConnectionFactory connFactory = new ActiveMQConnectionFactory("lingjian",
"lingjian", "tcp://localhost:61616");
// 第二部 通过connectionFactory 建立一个connection连接 并且调用connection
// 的start()方法开启连接,connection默认是关闭的Connection conn = connFactory.createConnection();
conn.start();
// 第三部 通过connection 建立session对象 用于接受消息 参数配置1用于是否开启事物 参数二为签收模式
// 一般我们设置为自动签收//Session session = conn.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
//使用事物
//Session session = conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
//使用Client主动签收的方式
Session session = conn.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE);// 第四部 通过session创建 Destination对象 指的是一个客户端用来指定生产消息目标和消费者目标来源的对象 在PTP模式中
// Destination被称之为QUEUE 在top模式中Destination disDestination = session.createQueue("myqueue"); // 参数为queue的名称
// 自定义名字// 第五部 我们需要通过Session对象来创建消息的发送者和接受者MessageProducer/MessageConsumer
MessageProducer mp = session.createProducer(disDestination);
// 第六步 我们可以使用MessageProducer 的setDeliveryMode() 设置持久化和非持久化 特性
// (DeliverMode) 稍后详解mp.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// 第七步 最后我们使用JMS规范 的TextMessage形式创建数据(通过ssession对象创建)并用MessageProducer
// 的send方法发送数据 同理客户端使用TextMessage createTextMessage = session.createTextMessage();
for (int a = 0; a < 5; a++) {
System.out.println("我是发送的消息内容....id为" + a + "....");
createTextMessage.setText("我是发送的消息内容....id为" + a + "....");
mp.send(createTextMessage);
}
//事物提交需要commit
session.commit();
if (conn != null) {
conn.close();
}
消费者代码:
public class Receiver {
public static void main(String[] args) throws Exception {
// 1 建立ConnectionFactory工厂对象 需要输入用户名 密码 以及连接的地址 具使用默认即可 默认的端口为
// tcp://localhost:61616
//ConnectionFactory connFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,
// ActiveMQConnectionFactory.DEFAULT_PASSWORD, "tcp://localhost:61616");
ConnectionFactory connFactory = new ActiveMQConnectionFactory("lingjian",
"lingjian", "tcp://localhost:61616");
// 第二部 通过connectionFactory 建立一个connection连接 并且调用connection
// 的start()方法开启连接,connection默认是关闭的Connection conn = connFactory.createConnection();
conn.start();
// 第三部 通过connection 建立session对象 用于接受消息 参数配置1用于是否开启事物 参数二为签收模式
// 一般我们设置为自动签收Session session = conn.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);
// 第四部 通过session创建 Destination对象 指的是一个客户端用来指定生产消息目标和消费者目标来源的对象 在PTP模式中
// Destination被称之为QUEUE 在top模式中Destination disDestination = session.createQueue("myqueue"); // 参数为queue的名称
// 自定义名字// 第五部 我们需要通过Session对象来创建消息的发送者和接受者MessageProducer/MessageConsumer
// MessageProducer mp = session.createProducer(disDestination);
MessageConsumer createConsumer = session.createConsumer(disDestination);while (true) {
TextMessage receive = (TextMessage) createConsumer.receive();
//如果设置了手动签收 消息 则需要设置 另起一个线程 tcp 通知activemq确认签收
receive.acknowledge();
if (receive == null)
break;System.out.println("接收到的内容为:"+receive.getText());
}if (conn != null) {
conn.close();
}
}
}
说明:所有包都是JMS下面的包 可以把ActiveMQ目录下的activemq-all-xxx.jar导入项目
权限配置 在conf/activemq.xml中插入以下信息
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="lingjian" password="lingjian" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
然后跑一下生产者和消费者就行了 一个简单的ActiveMQ就实现了 如果想要复杂使用的话,关于JMS中的生产者和消费者参数可以详细了解一下,比如能配置队列消息存活时间,消费优先级,消费模式,等等 小伙伴们就自己深入研究了,我是爱学习的张三,欢迎大家一起讨论学习