JMS入门小案例

本文详细介绍了如何使用ActiveMQ进行JMS点对点通信,通过创建QueueProducer和QueueConsumer实例,以及发布/订阅模式的TopicProducer和TopicConsumer,展示了消息的发送、接收与确认机制。同时探讨了不同确认模式和消息分发特点。
摘要由CSDN通过智能技术生成

消息中间件ActiveMQ的学习(JMS和ActiveMQ的学习)

使用idea书写JMS入门案例

点对点案例

点对点的模式主要建立在一个队列上面,当连接一个列队的时候,发送端不需要知道接收端是否正在接收,可以直接向ActiveMQ发送消息,发送的消息,将会先进入队列中,如果有接收端在监听,则会发向接收端,如果没有接收端接收,则会保存在activemq服务器,直到接收端接收消息,点对点的消息模式可以有多个发送端,多个接收端,但是一条消息,只会被一个接收端给接收到,哪个接收端先连上ActiveMQ,则会先接收到,而后来的接收端则接收不到那条消息。~

  • 导入Maven依赖
	 <dependency>		
	 <groupId>org.apache.activemq</groupId>		
	 <artifactId>activemq-client</artifactId>		
	 <version>5.14.5</version>	 
	 </dependency>~
  • 创建信息提供者QueueProducer类
public class QueueProducer {
    public static void main(String[] args) throws JMSException {
        //1.创建连接工厂
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.188.130: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();


    }
}
~
  • 消息的确认模式:
名称概念
AUTO_ACKNOWLEDGE = 1自动确认
CLIENT_ACKNOWLEDGE = 2客户端手动确认
DUPS_OK_ACKNOWLEDGE = 3自动批量确认
SESSION_TRANSACTED = 0提交事务并确认
  • 启动main方法,去activemq管理者页面查看:
    在这里插入图片描述
  • 此时创建信息消费者类QueueConsumer:
public class QueueConsumer {
    public static void main(String[] args) throws JMSException, IOException {
        //1.创建连接工厂
        ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.188.128: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个以上的消费者,再次运行生产者,观察每个消费者控制台的输出,会发现只有一个消费者会接收到消息。~

在这里插入图片描述
在这里插入图片描述

发布/订阅模式:

  • 创建消息生产者TopicProducer 类:
public class TopicProducer {
    public static void main(String[] args) throws JMSException {
        //1.创建连接工厂
        ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.188.130: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();
    }
}
~

在这里插入图片描述

  • 创建两个消费者类TopicConsumer1,TopicConsumer2
public class TopicConsumer1 {
    public static void main(String[] args) throws JMSException {
        //1.创建连接工厂
        ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.188.130: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.创建消息消费
        MessageConsumer consumer = session.createConsumer(topic);

        //7.监听消息
        consumer.setMessageListener(new MessageListener() {
            public void onMessage(Message message) {
                TextMessage textMessage=(TextMessage)message;
                try {
                    System.out.println("TopicConsumer1接收到消息:"+textMessage.getText());
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        //8.等待键盘输入
        try {
            System.in.read();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //9.关闭资源
        consumer.close();
        session.close();
        connection.close();
    }
}~

在这里插入图片描述

在这里插入图片描述

  • 可以看到,当一个提供者发布消息后,两个消费者都可以获取消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值