消息队列之rabbitMQ

    科技2022-08-04  121

    rabbitMQ

    1、什么是消息队列?

    可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。目前使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ。 可以想象一下应用场景:双十一千万用户同时进行秒杀,如果只是简单的并行处理就会导致服务器崩溃。则可以使用MQ,把并行变成了串行,谁先进入队列,谁先执行。就可以很好的处理千万量级的同步事件。 使用条件:调用者A通过消息队列MQ调用执行者B,A不需要B的任何返回值,只是简单的A启动B。A发送消息到队列,B去队列中拿消息再去处理执行。

    2、rabbitMQ实现

    1、docker安装 15672是控制台端口,可以通过网址访问。(注意阿里云要开端口号)http://服务器host地址:15672

    docker run -d --name rabbitMQ -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -p 5672:5672 -p 15672:15672 rabbitmq:management

    2、流程 多个队列时候需要一个交换机。 3、后端代码实现 1、导包

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

    2、rabbitMQ控制台中添加新的队列

    3、yml中配置:

    spring: rabbitmq: host: 192.168.80.141//主机地址 port: 5672 //通信端口号 username: admin password: 1234567

    4、生产端(发消息) 代码:

    @Resource RabbitTemplate rabbitTemplate; @Test //“testqueue” 队列名称 “22222” 发送的内容,如果是对象,请序列化。 public void handler() throws JsonProcessingException, UnsupportedEncodingException { rabbitTemplate.convertAndSend("testqueue","222222222222222222222222"); System.out.println("发送完成"); }

    5、消费者代码:(取消息,需要监听!!!!) 注意一定要放入IOC容器中

    package com.neuedu.mail; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component //!!!!! public class TestCustomer { @RabbitListener(queues = "testqueue") public void receiver(Message message) { System.out.println(new String(message.getBody())); } }
    Processed: 0.011, SQL: 8