RabbitMQ(三)消费者生产者

前置:RabbitMQ的工作机制和架构图

消息中间件最大的特点就是解耦:生产者只要把消息发送不去就可以不用管了,消费者不管在不在线都行,消费者上线的时候会来处理带消费的信息

  • Publisher - 生产者:发布消息到RabbitMQ中的Exchange
  • Consumer - 消费者:监听RabbitMQ中的Queue中的消息
  • Exchange - 交换机:和生产者建立连接并接收生产者的消息
  • Queue - 队列:Exchange会将消息分发到指定的Queue,Queue和消费者进行交互
  • Routes - 路由:交换机以什么样的策略将消息发布到Queue

简单架构图
在这里插入图片描述

原理:消息发送的时候,
1.先由生产者发送到消息交换机(有默认,可配置)
2.消息交换机根据既定的策略帮你把消息路由到不同的队列上面去(意味着消息收发的形式更加的多样)
3.消息消费者就去监听不同的队列

完整架构图
在这里插入图片描述

一. 搭建一个空的工程

目的:方便日后多个项目关联及扩充

第一步
在这里插入图片描述
在这里插入图片描述

1.1 建立consumer01工程—创建消费者

f

1.1.1 依赖

 <dependency>                                            
     <groupId>org.springframework.boot</groupId>         
     <artifactId>spring-boot-starter-amqp</artifactId>   
 </dependency>                                           
 <dependency>                                            
     <groupId>org.springframework.boot</groupId>         
     <artifactId>spring-boot-starter-web</artifactId>    
 </dependency>                                           
                                                         
 <dependency>                                            
     <groupId>org.springframework.boot</groupId>         
     <artifactId>spring-boot-starter-test</artifactId>   
     <scope>test</scope>                                 
 </dependency>                                           
 <dependency>                                            
     <groupId>org.springframework.amqp</groupId>         
     <artifactId>spring-rabbit-test</artifactId>         
     <scope>test</scope>                                 
 </dependency>                                           

1.1.2 application配置

spring.rabbitmq.host=1.12.235.192
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

#虚拟主机,这个配置非常重要
spring.rabbitmq.virtual-host=/

1.1.3 RabbitConfig

package com.huang.config;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;



@Configuration
public class RabbitConfig {
    public static  final   String MY_QUEUE_NAME_01= "hello-queue";

    /**
     * 在Spring中,只需要将一个Queue对象注册到Spring容器中,RabbitMQ就会自动创建该队列
     * @return
     */
    @Bean
    Queue myQueue(){
        /**
         * 1.队列的名字   我们这里为"hello-queue"
         * 2.队列是否持久化:RabbitMQ重启之后,队列是否还存在   我们这里设置为true,即队列存在
         * 3.队列的排他性:这个为true,只有创建这个队列的连接才能给这个队列发消息    我们这里设置为false,即谁都可以给这个队列发消息
         * 4.如果没有人消费这个队列,是否直接删除该队列
         */

        return  new Queue(MY_QUEUE_NAME_01,true,false,false);
    }
}


1.1.4 RabbitConsumer

package com.huang.consumer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;



@Component
public class RabbitConsumer {
       private static  final Logger logger = LoggerFactory.getLogger(RabbitConsumer.class);

    /**
     * @RabbitListener(queues = "hello-queue")
     * 通过这个注解,来指定该方法需要监听的消息队列,注解中的参数就是要去监听的消息队列的名称。
     * @param msg
     */
    @RabbitListener(queues = "hello-queue")
       public  void  handleMsg(String msg){
           logger.info("msg:{}",msg);
       }

}

1.2 建立producer01工程—创建生产者

在这里插入图片描述

1.2.1 依赖

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

1.2.2 application

spring.rabbitmq.host=1.12.235.192
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

//5672通信管理,15672界面管理
spring.rabbitmq.port=5672
spring.rabbitmq.virtual-host=/

1.2.3 创建一个和消费者一样的RabbitConfig

1.2.4 生产者的测试类创建消息模板

@SpringBootTest
class Producer01ApplicationTests {
    //这个就是一个消息发送模板
    @Autowired
    RabbitTemplate rabbitTemplate;

    @Test
    void contextLoads() {
        /**
         * 1.消息队列的名字
         * 2.要发送的消息内容
         * 3.
         */
     rabbitTemplate.convertAndSend(RabbitConfig.MY_QUEUE_NAME_01,"hello rabbitmq!");
    }
}

运行这个测试类去发送消息,消费者收到消息

1.2.5 测试结果即RabbitMQ网页显示

java的生产者启动后,消费者控制台收到消息
在这里插入图片描述

RabbitMQ界面显示

1.Ready等待消费的消息数量
2.Unacked消息已经消费确认数量
3.totl是1和2的总和在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值