消息中间件 与 JMS的原生写法

第一部分: 点对点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();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42333583/article/details/82746697
今日推荐