Message Queue
文章平均质量分 94
carl-zhao
I never grew up, but i never stop growing.
展开
-
8、RocketMQ 源码解析之消息发送
当我们启动了元数据管理 NameServer 以及 消息管理 Broker。下面我们就可以进行消息发送了。RocketMQ 支持三种消息发送方式:同步消息发送(sync):当 Producer 发送消息到 Broker 时会同步等待消息处理结果异步消息发送(async):当 Producer 发送消息到 Broker 时会指定一个消息发送成功的回调函数,调用消息发送后立即返回不会阻塞。消息发送成功或者失败会在一个新的线程中进行处理。单向消息发送(oneway):当 Producer 发送消息到 Br原创 2022-05-04 00:10:03 · 886 阅读 · 0 评论 -
7、RocketMQ 源码解析之 Broker 启动(下)
在前面的一篇文章 -- [6、RocketMQ 源码解析之 Broker 启动(上),分析了一下 Broker 在启动的时候他自身做了哪些事,以及把 Broker 相关的信息注册到 NameServer 中去,下面我们就通过 Broker 把元信息注册到 NameServer 来了解一下 RocketMQ 是如何进行网络间通信的。原创 2022-04-03 20:48:48 · 818 阅读 · 0 评论 -
6、RocketMQ 源码解析之 Broker 启动(上)
上面一篇我们介绍了 RocketMQ 的元数据管理,它是通过自定义一个 KV 服务器。并且其它服务在 NameServer 注册服务信息的时候都是全量注册。如果 RocketMQ 的拓扑图当中有多台 NameServer 的时候,只要有一台存活的话 RocketMQ 集群就可以正常工作。当 RocketMQ 作为消息队列要向外提供服务的时候,除了需要第一步启动 NameServer 用来保存元数据,还需要启动 RocketMQ 的 Broker。这样才能 Producer 才能发现消息到 Broke原创 2022-04-02 14:06:34 · 2941 阅读 · 0 评论 -
5、RocketMQ 源码解析之 命名服务启动
在 RocketMQ 当中,消息发送方以及消息接收方都是配置命名服务(Name Server)的地址。通过命名服务解耦合了消息发送者以及消息接收方,不同于 Kafka 直接连接 Broker 地址。命名服务的主要功能包含:Broker 管理以及消息的路由管理。具有如下:Broker 管理,NameServer接受来自 Broker 集群的注册,并提供心跳机制来检查Broker是否活着路由管理,每个NameServer将保存关于Broker集群的整个路由信息和供客户端查询的 queue (队列) 信息。原创 2022-01-07 22:02:05 · 2125 阅读 · 0 评论 -
4、RocketMQ 源码解析之 网络通信 Netty
可以看到 RocketMQ 里面有消息发送方(Producer)、配置中心(NameServer)、消息存储中心(Broker) 以及消息消费方(Consumer)。而且它们之间也需要相互通信的,那么它们是怎么通信的呢?因为 RocketMQ 是通过 Java 语言编写的,对于网络通信它就选择了 Netty 并且通过自定义协议来完成各个角色之间的高效的网络通信。原创 2021-12-26 14:06:47 · 1070 阅读 · 0 评论 -
3、RocketMQ 源码解析之 源代码环境搭建
在之前的文章中我们知道了 RocketMQ 里面的核心功能、架构和概念。并且也介绍了它的简单使用与 Spring Boot 的集成。下面开始我们对 RocketMQ 的源码探索,首先我们先在自己本地搭建 RocketMQ 的源代码环境。1、下载源代码首先我们可以在 rocketmq github 网站下载 Rocket MQ 的源代码,它是以 maven 进行项目管理的。接着把项目导入到自己的开发工具中,博主使用的是 Idea。导入 idea 如下图显示:下面我们来介绍一下项目中的各个 Modul原创 2021-12-22 21:37:14 · 699 阅读 · 0 评论 -
2、RocketMQ 源码解析之 与 Spring Boot 集成
上一篇文章分析了一下 RocketMQ 的基本架构、概念、安装以及使用方式。现在大多数项目都是基于 Spring Boot。因为它很方便的自动装配机制,所以现在构建项目都是基于 Spring Boot。下面我们来分析一下 RocketMQ 是如何集成 Spring Boot 的。RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker 负责存储消息。Broker 在实际部署过程中对应一台服务器原创 2021-12-21 22:29:54 · 602 阅读 · 0 评论 -
1、RocketMQ 源码解析之 Hello World
Apache RocketMQ是一个分布式消息传递和流媒体平台,具有低延迟、高性能和可靠性、万亿级容量和灵活的可伸缩性。原创 2021-12-20 21:18:53 · 436 阅读 · 0 评论 -
Spring EL 表达式隔离不同环境的 RocketMQ
项目之前使用的是 RabbitMQ 作为消息中间件用来解耦服务之间的调用,现在需要对消息中间件进行升级决定采用 RocketMQ。RocketMQ 相比 RabbitMQ 更具有优势,当然大家可以在网上查找到相关资料。这里就不在赘述了。今天主要是讲如何使用 Spring EL 表达式来隔离不同环境的 RocketMQ 的。因为在非生产环境我们为了优化资源的效果,只部署了一套 RabbitMQ 环境。但是非生产环境有多套环境:dev(开发环境)、test(测试环境)、pre(预生产环境)。所以我们在使用 R原创 2021-08-06 00:45:02 · 2050 阅读 · 1 评论 -
Spring Boot 集成 Redis 事件通知实现订单到期自动关闭
之前写过一篇文章 RabbitMQ 延迟队列实现订单自动关闭,今天介绍另外一种方式就是通过 Redis 的过期来实现订单自动关闭。1、功能概述从 Redis 2.8.0 开始,健空间通知允许客户订阅 Pub/Sub 通道以接收影响Redis数据集的事件。可以接收到的事件的例子如下:影响给定键的所有命令。接收LPUSH操作的所有键。所有键在数据库 0 中到期。事件是使用正常的发布/订阅层的Redis,所以实现发布/订阅的客户端可以使用这个功能而不需要修改。因为 Redis 发布/订阅是 f原创 2020-07-11 20:20:22 · 1753 阅读 · 0 评论 -
RabbitMQ 延迟队列实现订单自动关闭
1、延迟队列延迟队列存储的对象肯定是对应的延时消息,所谓”延时消息”是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费。在电商系统中,当用户提交订单超过 30 分钟未支付就是自动取消。一般的解决方案是使用定时任务来轮训数据库,然后找到过期的订单来修改订单状态。当系统的数据量小的时候下没有什么问题。但是如果数据量一大这种方式就会特别消耗资源。并且这...原创 2020-04-22 23:33:45 · 3376 阅读 · 0 评论 -
Apache Kafka 介绍
Apache Kafka®是一个分布式流平台。这到底是什么意思呢? 流媒体平台有三个关键功能:发布和订阅记录流,类似于消息队列或企业消息传递系统。以容错的持久方式存储记录流。当记录发生时处理它们的流。Kafka通常用于两大类应用程序:构建实时流数据管道,在系统或应用程序之间可靠地获取数据构建转换或响应数据流的实时流应用程序为了理解Kafka是如何做这些事情的,让我们深入探索一...翻译 2020-03-14 17:34:46 · 586 阅读 · 0 评论 -
1、Rabbitmq hello world
RabbitMQ 是一个消息 broker:它接受和转发消息。你可以把它想象成一个邮局:当你把你想要发布的邮件放在一个邮筒里时,你可以确定邮差先生最终会把邮件交给你的收件人。在这个类比中,RabbitMQ 是一个邮筒、一个邮局和一个邮递员。RabbitMQ 和邮局之间的主要区别在于,它不处理纸张,而是接受、存储和转发二进制数据消息。1、概念及准备RabbitMQ 和消息传递 通常使...原创 2018-08-11 14:09:58 · 432 阅读 · 0 评论 -
2、Rabbitmq Work Queues
在第一个教程中,我们编写了从指定队列发送和接收消息的程序。在这个过程中,我们将创建一个工作队列,它将用于在多个工人之间分配耗时的任务。工作队列(又名:任务队列)背后的主要思想是避免立即执行资源密集型任务,并必须等待它完成。相反,我们将任务安排在以后完成。我们将一个任务封装为一条消息并将其发送到队列。在后台运行的工作进程将会弹出这些任务并最终执行任务。当你运行许多 Consumer 时,任务将在...原创 2018-08-11 17:44:51 · 561 阅读 · 0 评论 -
7、Spring Integration RabbitMQ
经过前面的教程我们知道了 RabbitMQ 里面的基本的队列消息发送,以及不同类型的交换器的消息发送。今天就来分享一下 RabbitMQ 与 Spring 集成的 demo。集成里面主要分享三个类型的消息:默认交换器(也就是队列)类型的消息, 发送一个测试消息到队列queue.test.queue 里面。然后使用监听去打印获取到的消息。fanout(扇形)交换器类型的消息,也就是发布/订阅...原创 2018-08-14 23:42:10 · 2836 阅读 · 3 评论 -
3、Rabbitmq Publish Subscribe
在上一篇教程中,我们创建了一个工作队列。工作队列背后的假设是,每个任务都交付给一个工人。在这一部分中,我们将做一些完全不同的事情 —— 我们将向多个消费者传递一个消息。这种模式被称为“发布/订阅”。为了说明这个模式,我们将构建一个简单的日志系统。它将由两个程序组成 —— 第一个将发出日志消息,第二个将接收并打印它们。在我们的日志系统中,接收程序的每一个运行副本都将得到消息。这样我们就可以运...原创 2018-08-11 23:25:33 · 304 阅读 · 0 评论 -
4、Rabbitmq Message Routing
在上一篇教程中,我们构建了一个简单的日志记录系统。我们能够向许多接收者广播日志消息。在本教程中,我们将向它添加一个特性 —— 我们将使只订阅消息的一个子集成为可能。例如,我们将能够只向日志文件发送关键的错误消息(以节省磁盘空间),同时仍然能够打印控制台上的所有日志消息。1、绑定在前面的例子中,我们已经在创建绑定了。你可能会想起这样的代码:channel.queueBind(...原创 2018-08-12 11:26:02 · 390 阅读 · 0 评论 -
5、Rabbitmq Message Topics
在上一篇教程中,我们改进了日志系统。我们使用的是 fanout 类型的交换器,而不是使用一个只能进行虚拟广播的 fanout 交换器,并且获得了有选择性地接收日志的功能。尽管使用 direct 交换器改进了我们的系统,但是它仍然有局限性 —— 它不能基于多个标准进行路由。在我们的日志系统中,我们可能不仅要根据严重程度订阅日志,而且还要基于发出日志的源头。你可能从syslog unix工具中...原创 2018-08-12 14:59:20 · 630 阅读 · 0 评论 -
6、Rabbitmq Message RPC
在 第二个教程 中,我们学习了如何使用工作队列来在多个工作者之间分配耗时的任务。但是,如果我们需要在远程计算机上运行一个函数并等待结果呢?好吧,那是另一回事了。这种模式通常称为 Remote Procedure Call (远程过程调用)或 RPC。在本教程中,我们将使用RabbitMQ来构建RPC系统:客户机和可伸缩RPC服务器。由于我们没有任何值得分发的耗时任务,我们将创建一个返回...原创 2018-08-12 18:47:58 · 432 阅读 · 0 评论 -
8、RabbitMQ Virtual Hosts
RabbitMQ 是多租户系统:连接、交换、队列、绑定、用户权限、保单和其他一些东西属于虚拟主机、实体的逻辑组。如果你熟悉 Apache virtual hosts 或 Nginx server blocks,它们的功能是类似的。然而,有一个重要的区别:Apache 中的虚拟主机是在配置文件中定义的;RabbitMQ 并不是这样的:它的虚拟主机是使用 rabbitmqctl 或 HTTP API ...原创 2018-08-16 23:02:31 · 1374 阅读 · 0 评论 -
Linux Rabbitmq 安装
rabbitmq 是基于 AMQP 协议的一种消息队列服务器。AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议。RabbitMQ 在小型创业公司和大型企业中有超过 3.5 万的生产部署,RabbitMQ 是最受欢迎的开源消息代理。RabbitMQ 是轻量级的,并且可以很容易地部署在前提和云中。它支持多个消息传递协议...原创 2018-08-11 12:41:48 · 1076 阅读 · 0 评论