SpringBoot整合RabbitMQ

1 整合RabbitMQ

1.1 RabbitMQ的相关概念

  • 组成部分

    • 队列(Queue)

    声明队列

    ```java

    @Bean

    public Queue addUserQueue() {

    return new Queue("demo-user-add");

    }

    ```

    • 交换机(Exchange)

    用于转发消息,但是它不会做存储 ,如果没有 Queue bind 到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消息。

    这里有一个比较重要的概念:路由键 。消息到交换机的时候,交互机会转发到对应的队列中,那么究竟转发到哪个队列,就要根据该路由键。

    交换机的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。交换机有四种类型:Direct, topic, Headers and Fanout

    Direct

    direct 类型的行为是"先匹配, 再投送". 即在绑定时设定一个 routing_key, 消息的routing_key 匹配时, 才会被交换器投送到绑定的队列中去。Direct Exchange是RabbitMQ默认的交换机模式,也是最简单的模式,根据key全文匹配去寻找队列。

    • topic

      类似Director模式,但是更加灵活,可以根据通配符去寻找对应的exchange。

      • 匹配一个字符

        # 匹配多个字符

        Headers

        设置header attribute参数类型的交换机

        Fanout

        转发消息到所有绑定队列;

        消息广播的模式,不管路由键或者是路由模式,会把消息发给绑定给它的全部队列,如果配置了routing_key会被忽略。

    代码声明一个exchange:

    java @Bean public TopicExchange demoTestTopicExchange() { return new TopicExchange("demoTestTopic"); }

    • 绑定(Binding)

      通过routing key声明exchange与queue之间关系的。从而确定了我这个msg发到哪个exchange上面

      。然后与exchange再路由到对应的queue上面,从而发给了对应的消费者

        @Bean
        public Binding addUserBinding() {
            return BindingBuilder.bind(addUserQueue()).to(addUserTopicExchange()).with("cn.com.user.add");
    
        }

    1.2 发送、接收消息

    1.2.1 发送消息

    ```java

    @Slf4j

    @Component

    public class UserMQSender {

    @Autowired

    private AmqpTemplate amqpTemplate;

    /**

    • 发送消息
    • @param exchangeNanme 队列名称
    • @param routingKey 路由key
    • @param msg 具体消息内容
    • @throws Exception

      */

      public void sendUserMQ(String exchangeNanme, String routingKey, String msg) throws Exception {

      log.info("向交换机:{},匹配规则:{}, 发送消息:{}", exchangeNanme, routingKey, msg);

      this.amqpTemplate.convertAndSend(exchangeNanme, routingKey, msg);

      }

}

##### 1.2.2 接收消息 * 通过注解的方式主动监听接收 > 声明我要监听哪个queue即可java

@RabbitListener(queues = "demo-user-add")

public void getMsg(String msg) throws Exception{

log.info("获取消息{}", msg);

User user = (User) JSONObject.toBean(JSONObject.fromObject(msg), User.class);

userService.addUser(user);

}

* 被动接收java

String data = (String) this.amqpTemplate.receiveAndConvert(queueName);

#### 1.3 模拟高并发取值java

@Test

public void testGetMsg() throws Exception{

ExecutorService service = Executors.newCachedThreadPool(); //创建一个线程池

final CountDownLatch beginCountDownLatch = new CountDownLatch(1);

final CountDownLatch countDownLatch = new CountDownLatch(100);

for (int i = 0; i < 100; i++) {
    Runnable runnable = new Runnable() {
        int index = 1;
        @Override
        public void run() {
            try {
                /**
                 *如果调用对象上的await()方法,那么调用者就会一直阻塞在这里,直到别人通过cutDown方法,将计数减到0,才可以继续执行。
                 * 这里先调用beginCountDownLatch的await方法,等到循环结束后,内存中就有100个线程等待去运行。
                 * 所以等到beginCountDownLatch调用countDown的时候,100个线程就开始执行
                 */
                beginCountDownLatch.await();
                log.info("------->index:{}", index);
                String data = (String) amqpTemplate.receiveAndConvert("demo-test");
                log.info("==============>消息n内容:{}", data);

                countDownLatch.countDown();
                index++;

            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    };
    service.execute(runnable);
}
//释放主线程,之前声明的100个线程就开始执行
beginCountDownLatch.countDown();
//
countDownLatch.await();

}

```

原文地址:https://www.cnblogs.com/KevinStark/p/10193722.html

时间: 2024-10-10 00:27:22

SpringBoot整合RabbitMQ的相关文章

springboot学习笔记-6 springboot整合RabbitMQ

一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿里巴巴公司的,现已经转让给apache). 消息中间件的工作过程可以用生产者消费者模型来表示.即,生产者不断的向消息队列发送信息,而消费者从消息队列中消费信息.具体过程如下: 从上图可看出,对于消息队列来说,生产者,消息队列,消费者是最重要的三个概念,生产者发消息到消息队列中去,消费者监听指定的消息

springboot系列-springboot整合RabbitMQ

一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿里巴巴公司的,现已经转让给apache). 消息中间件的工作过程可以用生产者消费者模型来表示.即,生产者不断的向消息队列发送信息,而消费者从消息队列中消费信息.具体过程如下: 从上图可看出,对于消息队列来说,生产者,消息队列,消费者是最重要的三个概念,生产者发消息到消息队列中去,消费者监听指定的消息

SpringBoot整合RabbitMQ之发送接收消息实战

实战前言 前几篇文章中,我们介绍了SpringBoot整合RabbitMQ的配置以及实战了Spring的事件驱动模型,这两篇文章对于我们后续实战RabbitMQ其他知识要点将起到奠基的作用的.特别是Spring的事件驱动模型,当我们全篇实战完毕RabbitMQ并大概了解一下RabbitMQ相关组件的源码时,会发现其中的ApplicationEvent.ApplicationListener.ApplicationEventPublisher跟RabbitMQ的Message.Listener.R

SpringBoot整合RabbitMQ之典型应用场景实战一

实战前言RabbitMQ 作为目前应用相当广泛的消息中间件,在企业级应用.微服务应用中充当着重要的角色.特别是在一些典型的应用场景以及业务模块中具有重要的作用,比如业务服务模块解耦.异步通信.高并发限流.超时业务.数据延迟处理等. RabbitMQ 官网拜读首先,让我们先拜读 RabbitMQ 官网的技术开发手册以及相关的 Features,感兴趣的朋友可以耐心的阅读其中的相关介绍,相信会有一定的收获,地址可见:http://www.rabbitmq.com/getstarted.html 在阅

SpringBoot整合RabbitMQ入门~~

SpringBoot整合RabbitMQ 入门2020-01-12 创建生产者类,并且在yml配置文件中配置5要素连接MQ yml配置文件 spring: rabbitmq: host: xx.xx.xx.xx port: 5672 virtual-host: / username: 默认guest password: 默认guest 编写生产者代码 使用@Configuration 表名它是配置类 再类中声明三要素 //交换机名称 @Bean("itemTopicExchange")

Springboot 整合RabbitMq ,用心看完这一篇就够了

Springboot 整合RabbitMq ,用心看完这一篇就够了 https://blog.csdn.net/qq_35387940/article/details/100514134包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct.Topic.Fanout的使用,消息回调.手动确认等. (但是关于rabbitMq的安装,就不介绍了)——————————————————————————————————————————————

SpringBoot整合RabbitMQ之整合配置篇

实战背景:RabbitMQ实战第一阶段-RabbitMQ的官网拜读已经结束了,相信诸位童鞋或多或少都能入了个门,如果还是觉得迷迷糊糊似懂非懂的,那我建议诸位可以亲自去拜读拜读官网的技术手册或者看多几篇我的视频跟源码!因为接下来我们将进入第二阶段,即应用实战阶段(备注:第一阶段的内容主要以视频的形式分享,感兴趣的童鞋可以加QQ群:583522159 自行获取) 实战分析:应用实战,当然是指真正的在企业级项目中的应用.在这一阶段中,我将以目前流行的微服务架构为奠基,整合RabbitMQ实现项目中常见

企业级 SpringBoot 教程 (十五)Springboot整合RabbitMQ

这篇文章带你了解怎么整合RabbitMQ服务器,并且通过它怎么去发送和接收消息.我将构建一个springboot工程,通过RabbitTemplate去通过MessageListenerAdapter去订阅一个POJO类型的消息. 准备工作 15min IDEA maven 3.0 在开始构建项目之前,机器需要安装rabbitmq,你可以去官网下载,http://www.rabbitmq.com/download.html ,如果你是用的Mac,你可以这样下载: brew install rab

SpringBoot b2b2c 多用户商城系统 (十五)Springboot整合RabbitMQ

这篇文章带你了解怎么整合RabbitMQ服务器,并且通过它怎么去发送和接收消息.我将构建一个springboot工程,通过RabbitTemplate去通过MessageListenerAdapter去订阅一个POJO类型的消息. 准备工作 15min IDEA maven 3.0 在开始构建项目之前,机器需要安装rabbitmq,你可以去官网下载,http://www.rabbitmq.com/download.html ,如果你是用的Mac,你可以这样下载: brew install rab

JAVA springboot微服务b2b2c电子商务系统 (十五)Springboot整合RabbitMQ

这篇文章带你了解怎么整合RabbitMQ服务器,并且通过它怎么去发送和接收消息.我将构建一个springboot工程,通过RabbitTemplate去通过MessageListenerAdapter去订阅一个POJO类型的消息. 准备工作 15min IDEA maven 3.0 在开始构建项目之前,机器需要安装rabbitmq,你可以去官网下载,http://www.rabbitmq.com/download.html ,如果你是用的Mac,你可以这样下载: brew install rab