1.3ActiveMQ
下载与安装
1.3.1
下载
官方网站下载:
http://activemq.apache.org/
1.3.2
安装(
Linux
)
(1)将
apache-activemq-5.12.0-bin.tar.gz
上传至服务器
(2)解压此文件
tar zxvf apache-activemq-5.12.0-bin.tar.gz
(3)为
apache-activemq-5.12.0
目录赋权
chmod 777 apache-activemq-5.12.0
(4)进入
apache-activemq-5.12.0\bin
目录
(5)赋与执行权限
chmod 755 activemq
--------------------------------------
知识点小贴士
--------------------------
linux
命令
chmod 755
的意思
chmod
是
Linux
下设置文件权限的命令,后面的数字表示不同用户或用户组的权限。
一般是三个数字:
第一个数字表示
文件所有者
的权限
第二个数字表示
与文件所有者同属一个用户组的其他用户
的权限
第三个数字表示
其它用户组
的权限
权限分为三种:
读(
r=4
),写(
w=2
),执行(
x=1
)
。 综合起来还有可读可执行(
rx=5=4+1
)、
可读可写(
rw=6=4+2
)、可读可写可执行
(rwx=7=4+2+1)
。
所以,
chmod 755
设置用户的权限为:
1.
文件所有者可读可写可执行
--7
2.
与文件所有者同属一个用户组的其他用户可读可执行
--5
3.
其它用户组可读可执行
--5
1.3.3
启动
./activemq start
出现下列提示表示成功!
假设服务器地址为
192.168.25.135
,打开浏览器输入地址
http://192.168.25.135:8161/
即可进入
ActiveMQ
管理页面
点击进入管理页面
输入用户名和密码 均为 admin
进入主界面
点对点消息列表:
列表各列信息含义如下:
Number Of Pending Messages
:
等待消费的消息 这个是当前未出队列的数量。
Number Of Consumers
:
消费者 这个是消费者端的消费者数量
Number Of Consumers
:
消费者 这个是消费者端的消费者数量
Messages Dequeued
:
出了队列的消息 可以理解为是消费这消费掉的数量。
2. JMS
入门小
Demo
2.1
点对点模式
点对点的模式主要建立在一个队列上面,当连接一个列队的时候,发送端不需要知道接
收端是否正在接收,可以直接向
ActiveMQ
发送消息,发送的消息,将会先进入队列中,如
果有接收端在监听,则会发向接收端,如果没有接收端接收,则会保存在
activemq
服务器,
直到接收端接收消息,点对点的消息模式可以有多个发送端,多个接收端,但是一条消息,
只会被一个接收端给接收到,哪个接收端先连上
ActiveMQ
,则会先接收到,而后来的接收
端则接收不到那条消息。
2.1.1
消息生产者
(1)创建工程
jmsDemo
,引入依赖
<
dependency
>
<
groupId
>
org.apache.activemq
</
groupId
>
<
artifactId
>
activemq-client
</
artifactId
>
<
version
>
5.13.4
</
version
>
</
dependency
>
(2)创建类
QueueProducer main
方法代码如下:
//1.创建连接工厂
ConnectionFactory connectionFactory=new
ActiveMQConnectionFactory("tcp://192.168.25.135:61616");
//2.获取连接
Connection connection = connectionFactory.createConnection();
//3.启动连接
connection.start();
//4.获取 session (参数 1:是否启动事务,参数 2:消息确认模式)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5.创建队列对象
Queue queue = session.createQueue("test-queue");
//6.创建消息生产者
MessageProducer producer = session.createProducer(queue);
//7.创建消息
TextMessage textMessage = session.createTextMessage("欢迎来到这个世界");
//8.发送消息
producer.send(textMessage);
//9.关闭资源
producer.close();
session.close();
connection.close();
上述代码中第
4
步创建
session
的两个参数:
第
1
个参数 是否使用事务
第
2
个参数
消息的确认模式
AUTO_ACKNOWLEDGE = 1
自动确认
CLIENT_ACKNOWLEDGE = 2
客户端手动确认
DUPS_OK_ACKNOWLEDGE = 3
自动批量确认
SESSION_TRANSACTED = 0
事务提交并确认
运行后通过
ActiveMQ
管理界面查询
2.1.2 消息消费者
创建类 QueueConsumer ,main 方法代码如下:
//1.创建连接工厂
ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.25.135:61616");
//2.获取连接
Connection connection = connectionFactory.createConnection();
//3.启动连接
connection.start();
//4.获取 session (参数 1:是否启动事务,参数 2:消息确认模式)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5.创建队列对象
Queue queue = session.createQueue("test-queue");
//6.创建消息消费
MessageConsumer consumer = session.createConsumer(queue);
//7.监听消息
consumer.setMessageListener(new MessageListener() {
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();
} }
});
//8.等待键盘输入
System.in.read();
//9.关闭资源
consumer.close();
session.close();
connection.close();
执行后看到控制台输出
接收到消息:欢迎来到这个世界
2.1.3 运行测试
同时开启
2
个以上的消费者,再次运行生产者,观察每个消费者控制台的输出,会发现只有
一个消费者会接收到消息。
2.2
发布
/
订阅模式
2.2.1
消息生产者
创建类
TopicProducer
,
main
方法代码如下:
//1.创建连接工厂
ConnectionFactory connectionFactory=new
ActiveMQConnectionFactory("tcp://192.168.25.135:61616");
//2.获取连接
Connection connection = connectionFactory.createConnection();
//3.启动连接
connection.start();
//4.获取 session (参数 1:是否启动事务,参数 2:消息确认模式)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5.创建主题对象
Topic topic = session.createTopic("test-topic");
//6.创建消息生产者
MessageProducer producer = session.createProducer(topic);
//7.创建消息
TextMessage textMessage = session.createTextMessage("欢迎来到这个世界");
//8.发送消息
producer.send(textMessage);
//9.关闭资源
producer.close();
session.close();
connection.close();
运行效果如下:
2.2.2
消息消费者
创建类
TopicConsumer ,main
方法代码如下:
//1.创建连接工厂
ConnectionFactory connectionFactory=new
ActiveMQConnectionFactory("tcp://192.168.25.135:61616");
//2.获取连接
Connection connection = connectionFactory.createConnection();
//3.启动连接
connection.start();
//4.获取 session (参数 1:是否启动事务,参数 2:消息确认模式)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5.创建主题对象
//Queue queue = session.createQueue("test-queue");
Topic topic = session.createTopic("test-topic");
//6.创建消息消费
MessageConsumer consumer = session.createConsumer(topic);
//7.监听消息
consumer.setMessageListener(new MessageListener() {
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();
} }
});
//8.等待键盘输入
System.in.read();
//9.关闭资源
consumer.close();
session.close();
connection.close();
2.2.3
运行测试
同时开启
2
个以上的消费者,再次运行生产者,观察每个消费者控制台的输出,会发现
每个消费者会接收到消息。