RabbitMQ的基本使用(适合新手)

 2023-02-22 21:35:02  阅读 0

一、文章简介

在本教程的这一部分中,我们将用Java编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者。我们将介绍Java API中的一些细节。

本文我们将创建一个生产者一个消费者,模拟通信。

二、引入配置文件、编写配置类

<!--rabbitmq消息队列-->
        <dependency>
            <groupId>com.wwj</groupId>
            <artifactId>rabbit-mq</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

 

  rabbitmq:
    host: 127.0.0.1
    port: 5672
    virtual-host: srb-host
    username: admin
    password: 123456

 

三、使用模板

创建生产者代码

//创建连接mq的连接工厂对象
ConnectionFactory connectionFactory = new ConnectionFactory();
//设置连接rabbitmq的主机
connectionFactory.setHost("192.168.200.130");
//设置端口号
connectionFactory.setPort(5672);
//设置连接哪个虚拟主机
connectionFactory.setVirtualHost("/ems");
//设置访问虚拟主机的用户名和密码
connectionFactory.setUsername("ems");
connectionFactory.setPassword("123");
Connection connection = connectionFactory.newConnection();
//创建通道
Channel channel = connection.creatChannel();
		/*
         * 通道绑定对应的消息队列
         * 参数一:queue       队列名称,如果队列不存在自动创建
         * 参数二:durable     用来定义队列特性是否要持久化  true 持久化队列  false 不持久化
         * 参数三:exclusive   是否独占队列 true 独占  false 不独占
         * 参数四:autoDelete  是否在消费完成后自动删除队列,   true 自动删除   false  不自动删除
         * 参数五:arguments   额外附加参数
         */
channel.queueDeclare("hello",false,false,false,null);

		/*
         *发布消息
         * 参数1; exchange    交换机名称
         * 参数2: routinqKey   队列名称
         * 参数3:传递消息额外设置
         * 参数4:消息的具体内容
         */
channel.basicPublish("","hello",null,"hello rabbitmq".getBytes());
//将队列中的消息持久化
channel.basicPublish("","hello", MessageProperties.PERSISTENT_TEXT_PLAIN,"hello rabbitmq".getBytes());

创建消费者代码

//创建连接mq的连接工厂对象
ConnectionFactory connectionFactory = new ConnectionFactory();
//设置连接rabbitmq的主机
connectionFactory.setHost("192.168.200.130");
//设置端口号
connectionFactory.setPort(5672);
//设置连接哪个虚拟主机
connectionFactory.setVirtualHost("/ems");
//设置访问虚拟主机的用户名和密码
connectionFactory.setUsername("ems");
connectionFactory.setPassword("123");
Connection connection = connectionFactory.newConnection();
//创建通道
Channel channel = connection.creatChannel();
		/*
         * 通道绑定对应的消息队列
         * 参数一:queue       队列名称,如果队列不存在自动创建
         * 参数二:durable     用来定义队列特性是否要持久化  true 持久化队列  false 不持久化
         * 参数三:exclusive   是否独占队列 true 独占  false 不独占
         * 参数四:autoDelete  是否在消费完成后自动删除队列,   true 自动删除   false  不自动删除
         * 参数五:arguments   额外附加参数
         */
channel.queueDeclare("hello",false,false,false,null);
		/*
         *消费消息
         * 参数1:消费那个队列的消息  队列名称
         * 参数2:开始消息的自动确认机制
         * 参数3:消费时的回调接口
         */
channel.basicConsume("hello",true,new DefaultConsumer(channel){

    //最后一个参数:消息队列中取出的消息
    @Override
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
        System.out.println("new String(body) = "+new String(body));
    }
});

四、工作队列

工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。当存在工作队列,两个消费者是竞争的关系,所以一个消息发送给哪个消费者是不确定的。


 

标签:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码