首页 > 其他分享 >RabbitMQ(1)

RabbitMQ(1)

时间:2022-10-27 23:35:11浏览次数:55  
标签:队列 RabbitMQ 发送 交换机 消息 key

1、初始MQ

  1.1 微服务间通讯有同步和异步两种方式:

    同步通讯:就像打电话,需要实时响应,时效性强,可以立即得到结果,耦合度高,

       性能吞吐能力低,有级联失败问题,有额外的资源消耗,Feign就属于同步方式

    异步通讯:就像微信发消息,不需要马上回复,异步调用可以避免上述问题

        无需等待订阅者处理完成,响应更快速

        服务之间不是直接调用,不存在级联失败问题

        耦合度低,每个服务都可以灵活插拔,可替换

        流量削峰,不管发送者发送消息的速率有多快,订阅者可以按照自己能接受的速度来处理消息

        但是,异步通信架构复杂,不好管理

2、MQ的安装

    MQ,简称消息队列,即存放消息的队列,

    常见的MQ有:ActiveMQ、RabbitMQ、 RocketMQ、Kafka我们这里只针对RabbitMQ来说:

    RabbitMQ中的一些角色:

      publisher:生产者

      consumer:消费者

      exchange:交换机

      queue:队列、存储消息

      virtualHost:虚拟主机、一个虚拟主机可以存放一个租户的多个exchage、queue

            来对不同租户的交换机和队列进行隔离

    1、导入依赖:springboot-boot-starter-amqp

    2、配置ynl文件:Spring:rabbitmq:host: 192.168.150.101

 

            Spring:rabbitmq:port: 5672

                   virtual-host: /   #虚拟主机

                   username: itcast

                    password: 123321

 

3、编写publisher消息发送 和 consumer消息接收(无交换机参与的最基本的发接操作)

      因为RabbitMq是实现两个微服务之间的消息异步发送,所以在两个微服务之间

      需要导入RabbitMq的依赖和yml配置

      消息发送:

        @Autowired

        private RabbitTemplate rabbitTemplate;

        rabbitTemplate.convertAndSend(队列名,消息内容);

      消息接收:

        类上标注@Component

        @RabbitListener(queues="监听的队列名"

        public void listener(String msg){  sout(msg);  }

 

    1、默认情况下,队列会把自己接收到的多条消息平均分配给监听它的消费者,这样会

    导致能者无消息消费、弱者消息过多消费过慢

    2、能者多劳:消费者每次只能获得一个消息,消费完了在给你一个

      yml配置:spring:rabbitmq:listener:simple: prefetch: 1

 

4、发布/订阅

  

    

 

 

  其中exchange交换机有三种类型:

  Fanout:广播,将消息递交给所有与交换机绑定的队列

  Direct:定向,将把消息递交给符合指定routing key的队列

  Topic:通配符,与Direct类似,在routing key中可以指定通配符 

      #:匹配多个   *:匹配一个

5、加入交换机之后的消息的接发

  第一种方式:

  1、消息的发送还是注入@RabbitTemplate对象,调用convertAndSend方法来发送消息

    rabbitTemplate.converAndSend(队列名,key名,消息内容)

    //如果使用Fanout交换机来发送消息,没有key,可以在key的位置上写一个空字符串

  2、消息的接收是通过声明@Bean的方式

    在@Configuration配置类中,通过@Bean注解的方式声明交换机、队列、交换机和

    队列的绑定关系

  第二种方式:

  1、消息的接收

    通过@RabbitListener注解的方式来声明:队列名、交换机名和交换机类型、

    和他们的绑定关系,以及key值   

    @RabbitListener(

      bindings = @QueueBinding(value = @Queue(name = "direct.queue2"),
      exchange = @Exchange(name = "itcast.direct", type = ExchangeTypes.DIRECT),
      key = {"red", "yellow"}
    ))

   2、消息的发送

    注入@RabbitTemplate

    发送消息:rabbitTemplate.convertAndSend(队列名,key,消息内容)  

 

6、用RabbitMQ来发送对象数据   

  1、 默认情况下,spring会把发送的消息序列化为字节发送到队列,接收消息的时候,

   在反序列化为对象,不过spring采用的是jdk的序列化方式,数据体积大、可读性差

  2、   我们用JSON转换器,来实现对象在MQ间的接发

    需要在发送端 和 接收端 来分别倒入依赖:

      1、jackson-dataformat-xml

      2、在@Configuration配置类里面写一个@Bean方法

        @Bean
        public MessageConverter jsonMessageConverter(){
        return new Jackson2JsonMessageConverter();
        }

        

      

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

            

标签:队列,RabbitMQ,发送,交换机,消息,key
From: https://www.cnblogs.com/jiaocha/p/16834379.html

相关文章

  • Python RabbitMQ pika的安装及fanout消息订阅模式的使用
    RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有......
  • rabbitmq 添加用户和权限分配
      添加账号密码,注意tags是权限角色,有五个角色选择,admin是权限最大的管理员,none是不能访问,建议练习赋予admin权限然后添加一个新的虚拟主机,设置权限: ......
  • SpringBoot配置RabbitMQ
    一、导入Maven依赖<!--Springboot父依赖--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-......
  • RabbitMQ管理面板D,DLX的含义
    rabbitmq管理面板的Queues中的features各参数解释D:durable的缩写,代表这个队列中的消息支持持久化.AD:autoDelete的缩写,代表当前队列的最后一个消费者退订时被自动删......
  • RabbitMQ的安装和简单概述
    一、安装RabbitMQ1、概述:RabbitMQ是一个开源的遵循AMQP协议实现的基于Erlang语言编写,一般地,需要先安装部署Erlang环境再安装RabbitMQ环境。但在docker中,Erlang环境已经......
  • rabbitmq fanout(广播)模式
    配置信息bbitMQ:host:rabbitmq.comport:0000username:0000password:0000topic:amq.fanoutqueueName:icost-betavirtualHost:icost-beta#......
  • Java实现rabbitMQ向MQ里推送消息
    配置文件application.properties里配置rabbitMQ的ip和端口,如果没有配置username和password,就是mq安装时默认的用户名密码:spring.rabbitmq.host=127.0.0.1spring.rabbitm......
  • 消息队列之RabbitMQ介绍与运用
    RabbitMQ说明本章,我们主要从RabbitMQ简介、RabbitMQ安装、RabbitMQ常用命令、RabbitMQ架构模式、RabbitMQ使用、Quick.RabbitMQPlus的使用和RabbitMQ总结这几个方面对R......
  • 快速启动rabbitmq
    文档说明:只记录关键地方;试验环境:linuxdebian11rabbitmqversion:"3"services:rabbitmq-server:image:rabbitmq:3-management-alpineconta......
  • 02-rabbitMq
    RabbitMQ说明本章,我们主要从RabbitMQ简介、RabbitMQ安装、RabbitMQ常用命令、RabbitMQ架构模式、RabbitMQ使用、Quick.RabbitMQPlus的使用和RabbitMQ总结这几个方面对R......