【RabbitMQ】学习笔记-p1

  • 流量削峰:不管发布事件的流量波动多大,都由 Broker 接收,订阅者可以按照自己的速度去处理事件

    异步调用缺点:

    • 架构复杂了,业务没有明显的流程线,不好管理

    • 需要依赖于 Broker 的可靠、安全、性能

      1.2 技术对比

      MQ:中文是消息队列(MessageQueue),字面来看就是存放消息的队列。也就是事件驱动架构中的Broker

      几种常见MQ的对比:

      | | RabbitMQ | ActiveMQ | RocketMQ | Kafka |

      | — | — | — | — | — |

      | 公司、社区 | Rabbit | Apache | 阿里 | Apache |

      | 开发语言 | Erlang | Java | Java | Scala&Java |

      | 协议支持 | AMQP,XMPP,SMTP,STOMP | OpenWire,STOMP,REST,XMPP,AMQP | 自定义协议 | 自定义协议 |

      | 可用性 | 高 | 一般 | 高 | 高 |

      | 单机吞吐量 | 一般 | 差 | 高 | 非常高 |

      | 消息延迟 | 微秒级 | 毫秒级 | 毫秒级 | 毫秒以内 |

      | 消息可靠性 | 高 | 一般 | 高 | 一般 |

      追求可用性:Kafka、 RocketMQ 、RabbitMQ

      追求可靠性:RabbitMQ、RocketMQ

      追求吞吐能力:RocketMQ、Kafka

      追求消息低延迟:RabbitMQ、Kafka

      2.快速入门


      2.1 安装RabbitMQ

      在线拉取镜像:

      docker pull rabbitmq:3-management

      执行下面的命令来运行MQ容器:

      docker run \

      -e RABBITMQ_DEFAULT_USER=admin \

      -e RABBITMQ_DEFAULT_PASS=123456 \

      –name mq \

      –hostname mq1 \

      -p 15672:15672 \

      -p 5672:5672 \

      -d \

      rabbitmq:3-management

      启动成功后访问地址:192.168.75.130:15672(注意ip要为自己虚拟机的,后面端口一致)

      2.2 RabbitMQ消息模型

      MQ的基本结构:

      RabbitMQ中的一些角色:

      • publisher:生产者

      • consumer:消费者

      • exchange:交换机,负责消息路由

      • queue:队列,存储消息

      • virtualHost:虚拟主机,隔离不同租户的 exchange、queue、消息的隔离

        RabbitMQ官方提供了5个不同的Demo示例,对应了不同的消息模型:

        2.3 入门案例

        简单队列模式的模型图:

        官方的HelloWorld是基于最基础的消息队列模型来实现的,只包括三个角色:

        • publisher:消息发布者,将消息发送到队列queue

        • queue:消息队列,负责接受并缓存消息

        • consumer:订阅队列,处理队列中的消息

          publisher实现

          步骤:

          • 建立连接

          • 创建 channel

          • 声明队列

          • 发送消息

          • 关闭连接和 channel

            代码实现:

            public class PublisherTest {

            @Test

            public void testSendMessage() throws IOException, TimeoutException {

            // 1.建立连接

            ConnectionFactory factory = new ConnectionFactory();

            // 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码

            factory.setHost(“192.168.75.130”);

            factory.setPort(5672);

            factory.setVirtualHost(“/”);

            factory.setUsername(“root”);

            factory.setPassword(“root”);

            // 1.2.建立连接

            Connection connection = factory.newConnection();

            // 2.创建通道Channel

            Channel channel = connection.createChannel();

            // 3.创建队列

            String queueName = “simple.queue”;

            channel.queueDeclare(queueName, false, false, false, null);

            先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

            深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

            因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

            由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

            如果你觉得这些内容对你有帮助,可以扫码领取!

            写在最后

            还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

            还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

            [外链图片转存中…(img-PGzyC6o1-1711476536857)]

            需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!