第一部分: 点对点Queue队列模式
queque模式特点:消息持久化,只要消费者上线就可以消费
原生的生产者步骤总结:
1 new一个ActiveMQConnectionFactory工厂跟安装有消息中间件的连接上
2 通过连接对象获取session
3 通过session封装目的地
4 通过session封装消息
5 关闭资源持久化
原生消费者步骤总结:
前面的步骤一模一样,只是他拿到session后,用session1 封装目的地 ,
2 通过session获取监控对象MessageListener拿到message
第一步:导包
导入消息中间件的包
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-client</artifactId> <version>5.13.4</version> </dependency>
第二步:直接撸代码
生产者productor
package queuejms; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class QueueProduct { public static void main(String[] args) throws JMSException { //1 创建工厂 ConnectionFactory factory=new ActiveMQConnectionFactory("tcp://192.168.5.111:61616"); //2 获取连接对象 Connection connection = factory.createConnection(); //3 开启连接 connection.start(); //4 根据连接对象获取session Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //5 根据ssession创建队列对象,封装目的地名称 Queue queue = session.createQueue("queue-product-demo"); //6 根据session创建生产者 MessageProducer producer = session.createProducer(queue); //7 创建并发送消息 TextMessage textMessage = session.createTextMessage("我的第一个jms,消息中间件"); producer.send(textMessage); //关闭资源 session.close(); connection.close(); } }
消费者consumer
package queuejms; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; import java.io.IOException; public class QueueConsumer { public static void main(String[] args) throws JMSException { //1 创建消息中间件工厂activeMQ ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.5.111:61616"); //2 根据工厂获取连接 Connection connection = factory.createConnection(); //3 开启连接 connection.start(); //4 根据连接创建session Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //5 创建队列对象 Queue queue = session.createQueue("queue-product-demo"); //6 创建消费者 MessageConsumer consumer = session.createConsumer(queue); //7 监听消息 consumer.setMessageListener(new MessageListener() { public void onMessage(Message message) { try { TextMessage textMessage= (TextMessage) message; System.out.println("接收到了消息:"+textMessage.getText()); } catch (Exception e) { e.printStackTrace(); } } }); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } //关闭资源 session.close(); connection.close(); } }
------------------------------------------------------------------------------------------------------------------------------------------------------------
第二部分: 点对点Topic发布和订阅模式
导包后直接撸代码
生产者:productor
package topicjms; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class TopicProduct { public static void main(String[] args) throws JMSException { //创建工厂 ConnectionFactory factory=new ActiveMQConnectionFactory("tcp://192.168.5.111:61616"); //获取连接对象 Connection connection = factory.createConnection(); //开启连接 connection.start(); //根据连接对象获取session Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //根据ssession创建队列对象,封装目的地名称 Topic topic = session.createTopic("topic-product-demo"); //根据session创建生产者 MessageProducer producer = session.createProducer(topic); //创建并发送消息 TextMessage textMessage = session.createTextMessage("我的第一个jms,消息中间件,使用topic方式发送"); producer.send(textMessage); //关闭资源 session.close(); connection.close(); } } 消费者consumer
package topicjms; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; import java.io.IOException; public class TopicConsumer { public static void main(String[] args) throws JMSException { //创建消息中间件工厂activeMQ ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.5.111:61616"); //根据工厂获取连接 Connection connection = factory.createConnection(); //开启连接 connection.start(); //根据连接创建session Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //创建队列对象 Topic topic = session.createTopic("topic-product-demo"); //创建消费者 MessageConsumer consumer = session.createConsumer(topic); //监听消息 consumer.setMessageListener(new MessageListener() { public void onMessage(Message message) { try { TextMessage textMessage= (TextMessage) message; System.out.println("接收到了消息:"+textMessage.getText()); } catch (Exception e) { e.printStackTrace(); } } }); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } //关闭资源 session.close(); connection.close(); } }