RabbitMQ基础篇 笔记

这篇具有很好参考价值的文章主要介绍了RabbitMQ基础篇 笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RabbitMQ

余额支付

同步调用

一步一步的来,支付业务写完后,如果之后加需求,还需要增加代码,不符合开闭原则。

性能上也有问题,openfeign是同步调用,性能太差。

同步调用耦合太多。

同步的优势是可以立即得到结果,例如查询,查到了就能知道结果。但是拓展性差,性能下降,级联失败。

异步调用

异步调用时基于消息通知的方式,一般包括3个角色。

  • 消息发送者

  • 消息代理

  • 消息接收值

发送者发送东西到消息代理,消息接受者监听消息代理。(类似于外卖柜)

故障也会隔离。

缓存消息,起到流量削峰填谷的功能。(流量整形)

缺点

拿不到对方执行的结果。不确定有没有执行成功。

安全依赖于mq的可靠性。(broker)


对于运行结果不关心的场景,性能要求较高就可以使用异步。

MQ技术选型

Message Queue(MQ)先进先出的消息队列。MQ的技术有很多实现方案,就用RabbitMQ erlang编译的

消费者与queue绑定。

生产者与exchange(交换机)绑定

交换机路由给queue,exchange与queue构成了broker(RabbitMQ)

公司可能搭建一个mq,然后所有的服务都用这个。因此为了隔离创建了VirtualHost(类似于数据库)

快速入门

交换机是负责路由转发消息的,它本身没有存储消息的能力。
必须让队列和交换机产生关系(绑定)

数据隔离

有虚拟主机的概念
首先创建一个用户。
RabbitMQ基础篇 笔记,rabbitmq,笔记

RabbitMQ基础篇 笔记,rabbitmq,笔记
不同的虚拟主机是互相隔离的。创建一个新的虚拟主机,那么所有的东西都是新的,类似与数据库。

使用Java操作

Spring AMQP

amqp是一种消息通信协议,它是协议。Spring 提供了一套统一的amqp协议标准。定义了接口,没实现,只有Spring Rabbit实现了。

  1. 引入依赖
  2. 在每个微服务中引入MQ服务端信息,5672端口。
  3. rabbitTemplate发送和接收。

生产者代码

@SpringBootTest
public class SpringAmqpTest {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    void testSendMessage2Queue() {
        String queueName = "simple.queue";
        String msg = "hello, amqp!";
        rabbitTemplate.convertAndSend(queueName, msg);
    }
 }

消费者代码

    @RabbitListener(queues = "simple.queue")
    public void listenSimpleQueue(String msg){
        System.out.println("消费者收到了simple.queue的消息:【" + msg +"】");
    }

Work Queues

多个消费者绑定同一个queue。
每个消息只会被一个消费者消费掉。
生产者投递的消息,不会考虑到消费者的处理能力。 所以需要添加 prefetch 参数。
每次只能取一条消息,处理完成才能获得下一个。这样就是能者多劳。
解决消息堆积问题。

Fanout 交换机(广播)

真正的环境一定会有交换机的,而不是直接发送到队列。交换机是有路由功能的,比如多个服务监听队列,只有一个服务能收到信息。但是交换机不同,多个服务都可以监听到队列。
他会将接收到的消息分发给与它绑定的每一个队列。
可以为每个微服务创建队列,这样每个微服务就都收到了。

    @Test
    void testSendFanout() {
        String exchangeName = "hmall.fanout2";
        String msg = "hello, everyone!";
        //交换机名字,routingKey,消息
        rabbitTemplate.convertAndSend(exchangeName, null, msg);
    }

交换机就是接受消息,路由转发消息,fanout就是广播。

Direct交换机(定向路由)

消息发给不同的人。

每一个Queue都与Exchange 设置一个 routingKey。
发送者发送消息时,制定消息的 routingKey
交换机只会给相同的 routingKey的队列投递消息。

Topic 交换机

与Direct交换机类似,区别是routingKey可以是多个单词的列表,并且按照.分割。#类似于正则中的*。而* 则代表一个单词。
例如china.*表示所有关于china的内容。

使用SpringAMQP创建交换机,队列


@Configuration
public class FanoutConfiguration {

    @Bean
    public FanoutExchange fanoutExchange(){
        // ExchangeBuilder.fanoutExchange("").build();
        return new FanoutExchange("hmall.fanout2");
    }

    @Bean
    public Queue fanoutQueue3(){
        // QueueBuilder.durable("ff").build();
        return new Queue("fanout.queue3");
    }

    @Bean
    public Binding fanoutBinding3(Queue fanoutQueue3, FanoutExchange fanoutExchange){
        return BindingBuilder.bind(fanoutQueue3).to(fanoutExchange);
    }

    @Bean
    public Queue fanoutQueue4(){
        return new Queue("fanout.queue4");
    }

    @Bean
    public Binding fanoutBinding4(){
        return BindingBuilder.bind(fanoutQueue4()).to(fanoutExchange());
    }
}

这种绑定太麻烦,可以通过注解绑定

  @RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "direct.queue1", durable = "true"),
            exchange = @Exchange(name = "hmall.direct", type = ExchangeTypes.DIRECT),
            key = {"red", "blue"}
    ))
    public void listenDirectQueue1(String msg) throws InterruptedException {
        System.out.println("消费者1 收到了 direct.queue1的消息:【" + msg +"】");
    }

消息转换器

发送一个对象类型的消息,接受后变成了一堆乱码,使用了Java的序列化方式。我们需要将它转为JSON格式的。
在有 @Configuration 注解的类上文章来源地址https://www.toymoban.com/news/detail-735018.html

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

到了这里,关于RabbitMQ基础篇 笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • rabbitmq笔记-rabbitmq进阶-数据可靠性,rabbitmq高级特性

    消息何去何从 mandatory和immediate是channel.basicPublish方法的两个参数,都有消息传递过程中不可达目的地时将消息返回给生产者的功能。 mandatory参数 true:交换器无法根据自身的类型 和路由键找到符合条件的队列,rabbitmq调用Basic.Return命令将消息返回给生产者 生产者调用channel.

    2024年02月10日
    浏览(43)
  • rabbitmq笔记-rabbitmq客户端开发使用

    1.创建ConnectionFactory,给定参数ip地址,端口号,用户名和密码等 2.创建ConnectionFactory,使用uri方式实现,创建channel。 注意: Connection可以用来创建多个channel实例,但channel实例不能在线程间共享,应用程序为每个线程开辟一个channel。多线程间共享channel实例是非线程安全的。

    2024年02月11日
    浏览(45)
  • rabbitmq笔记-1-6章What is RabbitMQ?

    动力节点最新RabbitMQ视频 RabbitMQ是一个广泛使用的消息服务器,采用Erlang语言编写,是一种开源的实现 AMQP(高级消息队列协议)的消息中间件; RabbitMQ最初起源于金融系统,它的性能及稳定性都非常出色; AMQP协议(http://www.amqp.org),即 Advanced Message Queuing Protocol,高级消息

    2024年02月01日
    浏览(31)
  • 【RabbitMQ笔记10】消息队列RabbitMQ之死信队列的介绍

    这篇文章,主要介绍消息队列RabbitMQ之死信队列。 目录 一、RabbitMQ死信队列 1.1、什么是死信队列 1.2、设置过期时间TTL 1.3、配置死信交换机和死信队列(代码配置) (1)设置队列过期时间 (2)设置单条消息过期时间 (3)队列设置死信交换机 (4)配置的基本思路 1.4、配置

    2024年02月16日
    浏览(77)
  • 动力节点rabbitmq笔记-12-17RabbitMQ消息Confirm模式

    动力节点最新rabbitMQ视频 消息的confirm确认机制,是指生产者投递消息后,到达了消息服务器Broker里面的exchange交换机,则会给生产者一个应答,生产者接收到应答,用来确定这条消息是否正常的发送到Broker的exchange中,这也是消息可靠性投递的重要保障; 1 配置文件applicatio

    2024年02月01日
    浏览(39)
  • 动力节点RabbitMQ笔记-1-6章What is RabbitMQ?

    笔记出自: 动力节点最新RabbitMQ视频 RabbitMQ是一个广泛使用的消息服务器,采用Erlang语言编写,是一种开源的实现 AMQP(高级消息队列协议)的消息中间件; RabbitMQ最初起源于金融系统,它的性能及稳定性都非常出色; AMQP协议(http://www.amqp.org),即 Advanced Message Queuing Proto

    2023年04月25日
    浏览(50)
  • RabbitMQ笔记一7-11章RabbitMQ工作模型【动力节点】

    broker 相当于mysql服务器,virtual host相当于数据库(可以有多个数据库) queue相当于表,消息相当于记录。   消息队列有三个核心要素:  消息生产者 、 消息队列 、 消息消费者 ; 生产者(Producer):发送消息的应用;(java程序,也可能是别的语言写的程序) 消费者(Con

    2023年04月26日
    浏览(36)
  • 【动力节点】最新rabbitmq笔记-1-6章What is RabbitMQ?

    动力节点最新RabbitMQ视频 RabbitMQ是一个广泛使用的消息服务器,采用Erlang语言编写,是一种开源的实现 AMQP(高级消息队列协议)的消息中间件; RabbitMQ最初起源于金融系统,它的性能及稳定性都非常出色; AMQP协议(http://www.amqp.org),即 Advanced Message Queuing Protocol,高级消息

    2024年02月03日
    浏览(43)
  • RabbitMQ安装配置,笔记整理 RabbitMQ3.12.2版本安装配置

    官网下载 RabbitMQ 官方地址:RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQ 下载时需注意Erlang Versions的版本  这里下载的是3.12.2  2. 安装依赖环境 在线安装依赖环境: yum   install   build-essential   openssl   openssl-devel   unixODBC   unixODBC-devel   make   gcc   gcc-c ++   kernel-d

    2024年02月12日
    浏览(38)
  • MQ学习笔记--(RabbitMQ)

    初识MQ RabbitMQ快速入门 SpringAMQP 同步通讯 异步通讯 MQ常见框架 同步通讯和异步通讯 同步通讯:比如微信视频,同一时间只能跟一个人视频,其他人想跟你视频的话,得等你这个视频结束之后才可以 异步通信:比如微信发消息,发了一个人后,别人可能还没回你,但你还可以

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包