【rabbitmq基础】

1.概念

  • 消息发送者(publisher):生产消息
  • 交换机(exchange):负责路由消息,把消息路由给队列,可以路由给一个队列,也可以路由给多个队列,这取决于交换机的类型
  • 队列(queue):队列,存储消息
  • 消息消费者(coumsmser):消费消息
  • 虚拟主机(virtual-host):虚拟主机,数据隔离作用
    在这里插入图片描述

2.数据隔离

在实际工作中,公司一般是在一个指定的服务器上去搭建mq,或者多个机器上去搭建集群模式,那一个公司肯定不止一个项目组,多个项目组的情况下,不可能每个项目都搞一套自己的mq,费时费力不说,维护还麻烦,所以mq就有数据隔离,多个项目组用一个环境的mq,数据不一样而已
在这里插入图片描述

3.使用控制台向mq传递消息

1.创建两个队列-“测试队列”,“测试队列2”

在这里插入图片描述

2.创建一个交换机-“测试交换机”

在这里插入图片描述

3.测试发送消息

3.1让交换机和队列进行绑定

在这里插入图片描述
绑定成功之后在指定的"测试队列"中也可以看到他和交换机的绑定关系
在这里插入图片描述

3.2发送消息

在这里插入图片描述

在这里插入图片描述

3.3查看消息

在这里插入图片描述
当然你也可以使用这个交换机同时绑定创建的两个队列

4.创建虚拟主机

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

5.java使用rabbitmq

5.1 发送消息

接着之前的在common里面引入依赖(没看之前的文章的直接就创建一个单体的springboot项目引入这个依赖就行)
在这里插入图片描述

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

在用户工程作为消息投递方,订单工程作为消费者,不通过交换机投递消息,并且消费
在这里插入图片描述

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

userController

 @Autowired
    RabbitTemplate rabbitTemplate;

@GetMapping("/sendMassage")
    @ApiOperation(value = "不通过交换机发送消息")
    public void sendMassage( String queueName ,String msg ){
   

        rabbitTemplate.convertAndSend(queueName,msg);
    }

接口测试
在这里插入图片描述
查看消息
在这里插入图片描述
在这里插入图片描述

5.2 消费消息

order工程加配置

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

创建orderListen

@Component
public class orderListen {

    @RabbitListener(queues = "测试队列2")
    public void listenOrder(String msg){
        System.out.println("我已经接收到订单消息:"+msg);
    }
}

在这里插入图片描述

6.任务模型work queues

简单的说就是多个消费者绑定一个队列

  1. 创建一个队列work.queue
  2. 生产者(用户服务)向队列(work.queue)中发送消息,每秒钟100条记录
  3. 创建两个消费者(订单服务)监听队列,一个消费者一秒钟消费20条,一个消费者一秒钟消费30条记录
    生产者代码
 @GetMapping("/sendWorkQueueMassage")
   @ApiOperation(value = "发送到任务模型")
   public void sendWorkQueueMassage() throws InterruptedException {
       String queueName="work.queue";

       for (int i = 1; i <=100 ; i++) {
           String msg="msg_"+i;
           rabbitTemplate.convertAndSend(queueName,msg);
           //休眠20毫秒
           Thread.sleep(20);
       }

   }

消费者代码

 @RabbitListener(queues = "work.queue")
    public void listenWorkQueueOrder(String msg) throws InterruptedException {
        System.out.println("消费者1已经接收到订单消息:"+msg);
       // Thread.sleep(30);
    }

    @RabbitListener(queues = "work.queue")
    public void listenWorkQueueOrder2(String msg) throws InterruptedException {
        System.err.println("消费者2已经接收到订单消息:"+msg);
      //  Thread.sleep(40);
    }

结果:
1.队列在被多个消费者绑定的时候,队列会把消息轮询分配给每一个消费者
2.消息被消费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值