JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。
JMS 定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一
些不同形式的数据,提供现有消息格式的一些级别的兼容性。
· TextMessage--一个字符串对象
· MapMessage--一套名称-值对
· ObjectMessage--一个序列化的 Java 对象
· BytesMessage--一个字节的数据流
· StreamMessage -- Java 原始值的数据流
JMS消息传递类型
对于消息的传递有两种类型:
一种是点对点的,即一个生产者和一个消费者一一对应;
另一种是发布/ 订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进
行接收。
ActiveMQ
下载
官方网站下载:http://activemq.apache.org/
安装(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 |
启动
./activemq start |
出现下列提示表示成功!
假设服务器地址为192.168.25.135 ,打开浏览器输入地址
http://192.168.25.135:8161/ 即可进入ActiveMQ管理页面
![](https://i-blog.csdnimg.cn/blog_migrate/a9cbccc9dfaad5ff34d685b2ecb8e56c.png)
账号密码都是admin
列表各列信息含义如下:
Number Of Pending Messages :等待消费的消息 这个是当前未出队列的数量。
Number Of Consumers :消费者 这个是消费者端的消费者数量
Messages Enqueued :进入队列的消息 进入队列的总数量,包括出队列的。
Messages Dequeued :出了队列的消息 可以理解为是消费这消费掉的数量。
点对点模式
一条消息,只会被一个接收端给接收到,哪个接收端先连上ActiveMQ,则会先接收到,而后来的接收端则接收不到那条消息。
JMS入门小Demo
(1)创建工程jmsDemo ,引入依赖
<dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-client</artifactId> <version>5.13.4</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
(2) 消息生产者
点对点模式和发布订阅模式 只是设置的消息类型不一样其他一样
package com.demo.queue; import org.apache.activemq.ActiveMQConnectionFactory; import org.junit.Test; import javax.jms.Connection; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; /** * 消息生产者 */ public class QueueProducer { @Test public void test() throws Exception { //1、创建连接工厂:1、用的TCP协议来连接;2、代码客户端来连接用的是61616 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616"); //2、获取连接 Connection connection = connectionFactory.createConnection(); //3、开启连接 connection.start(); //4、获取Session对象 //参数说明:1:是否启动事务;2:是否开启自动:AUTO_ACKNOWLEDGE是自动模式; Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //5、创建发布的消息类型 Queue queue = session.createQueue("queue-test"); // 和 topic 模式区别只是设置的消息类型不一样其他一样 // Topic topic = session.createTopic("topic_test"); //6、创建生产者 MessageProducer producer = session.createProducer(queue); //7、设置发送消息数据 TextMessage textMessage = session.createTextMessage("欢迎使用ActvieMQ 发送消息"); //8、生产者发送消息 producer.send(textMessage); //9、关闭资源 producer.close(); session.close(); connection.close(); } }(3) 消息消费者
只是设置的消息类型不一样, 并且消费者可以是多个
package com.demo.queue; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; /** *消息消费者 */ public class QueueCustomer { public static void main (String[] args) throws Exception { //1. 创建连接工厂 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616"); //2. 创建连接 Connection connection = connectionFactory.createConnection(); //3. 开启连接 connection.start(); //4. 创建session对象 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //5. 指定接收消息的类型(接收的类型和发送的类型一致) Queue queue = session.createQueue("queue-test"); // Topic topic = session.createTopic("topic_test"); //发布订阅模式 //6. 创建消费者 MessageConsumer consumer = session.createConsumer(queue); //7. 写监听: 设置监听消息(接受监听到的消息) consumer.setMessageListener(new MessageListener() { //message 是接收到的消息 public void onMessage(Message message) { TextMessage textMessage = (TextMessage) message; try { String text = textMessage.getText(); System.out.println("接收到的消息:"+text); } catch (JMSException e) { e.printStackTrace(); } } }); //8. 等待时间 //设置等待键盘按下 System.in.read(); //9. 关闭资源 consumer.close(); session.close(); connection.close(); } }