RabbitMQ实现生产者消费者

一.启动MQ

注意管理员身份进入cmd才行,我这里是在本地安装的MQ,推荐使用虚拟机安装

二.思路

官方解释RabbitMQ结构:

自我理解RabbitMQ结构:

其实RabbitMQ的服务器就像邮局一样,我们的生产者和消费者对于这个服务器来说都是消费者,因为服务器都可以向两者发送消息

环境准备

导入依赖

XML 复制代码
  <dependencies>
        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.7.3</version>
        </dependency>
    </dependencies>

建立生产者消费者

三.生产者代码

java 复制代码
public class Consumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //1.建立连接
        ConnectionFactory connectionFactory=new ConnectionFactory();
        connectionFactory.setHost("127.0.0.1");//MQ服务器地址
        connectionFactory.setPort(5672);//端口
        connectionFactory.setUsername("guest");//账号
        connectionFactory.setPassword("guest");//密码
        connectionFactory.setVirtualHost("/");//虚拟主机名称
        Connection connection= connectionFactory.newConnection();
        //2开启信道
        Channel channel =connection.createChannel();
        //3生明队列
        channel.queueDeclare("hello",true,false,false,null);
        //4发送消息
        String message="hello,my name is RabbitMQ";
        channel.basicPublish("","hello",null,message.getBytes());
        System.out.println("成功发送消息");
        //5资源释放
        channel.close();
        connection.close();
    }
}

代码中方法解读解读:

四.消费者代码

java 复制代码
public class Consumer {
    public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {
        //1.建立连接
        ConnectionFactory connectionFactory=new ConnectionFactory();
        connectionFactory.setHost("127.0.0.1");//MQ服务器地址
        connectionFactory.setPort(5672);//端口
        connectionFactory.setUsername("guest");//账号
        connectionFactory.setPassword("guest");//密码
        connectionFactory.setVirtualHost("/");//虚拟主机名称
        Connection connection= connectionFactory.newConnection();
        //2开启信道
        Channel channel =connection.createChannel();
        //3生明队列
        channel.queueDeclare("hello",true,false,false,null);
        //4消费消息
        DefaultConsumer consumer =new DefaultConsumer(channel){
            //队列收到消息,执行该方法
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("接收到了消息"+new String(body));
            }
        };
        channel.basicConsume("hello",true,consumer);
        //等待程序接受完毕大部分消息
        Thread.sleep(3000);//没有这条代码,将只接受MQ中一条消息
        //5资源释放
        channel.close();
        connection.close();
    }
}

读取了MQ中全部消息

相关推荐
阿丰资源9 分钟前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
呱牛do it19 分钟前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 8)
java
消失的旧时光-19431 小时前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解
NE_STOP1 小时前
Redis--发布订阅命令和Redis事务
java
PAC_3Dame1 小时前
记一次真实的线上OOM
java
SunnyDays10112 小时前
如何在Java中将Word文档转换为图像(JPEG、PNG或SVG)
java
Lumos_7772 小时前
Linux -- 线程
java·jvm·算法
知兀2 小时前
【MybatisPlus】后端用枚举类,数据库用tinyint,存在枚举类型转换
java
StockTV2 小时前
印度股票实时数据 NSE和BSE的实时行情、K 线及指数数据
java·开发语言·spring boot·python
User_芊芊君子2 小时前
【OpenAI 把 AI 玩明白了】:自主推理 + 动态知识图谱,这 4 个技术突破要颠覆行业
java·人工智能·知识图谱