1.订阅者的声明方式 我们以spring组件化的方式,声明一个消息订阅者,对于消息订阅者关心的主要有: topic: 一级消息类型(又名消息主题).如TRADE 消息类型:二级消息类型,区别同一Topic主题下的不同类型的消息; 如:TRADE(交易主题)下有 2300-trade-created-done(交易创建) group信息:又称组名,根据groupId来识别客户端机器, 配置为同一groupId视为同一集群的机器 .因此, 各个业务之间,发送方和订阅方之间的GroupId不能重复 示…
1.消息发布者声明 我们以spring的方式来声明一个消息发布者: <bean id="operateLogsMessageManager" class="com.taobao.hsf.notify.client.NotifyManagerBean" init-method="init"> <property name="name" value="ECRM-OPERATE_LOGS-NOTIFY&q…
1.连接管理 网络架构原来是使用是自己开发的网络框架Gecko,Gecko默认为每个网络连接分配64KB的内存,支持1000个网络连接,就需要大概64MB的内存.后来采用Netty重构了网络服务层. 在Netty4是采用 Reactor Pattern线程模型 所谓Reactor Pattern模型是IO multiplexing event loop,Reactor负责处理所有IO事件,同时dispatching各IO事件的handler. 在新的模型中,有一个Boss线程池和Woker线程池…
消息集群架构 对于发送方来说的关键几要素 topic 消息的主题,由用户定义.类似于知乎的话题,Producer发送消息的时候需要指定发送到某一个topic下面,Consumer从某一个topic下面消费消息. tag 每次发送一条消息的时候,给消息加一个Tag,方便Consumer过滤消息 message 消息,负载发送的消息的信息.在生产者,服务端和 消费者之间传输 queue queue就是metaq中具体用来存数消息的数据结构,每一个topic下面对应多个queue,以目录的形式分开存储…
消费者的实例化 关于consumer的默认实现,metaq有两种: DefaultMQPullConsumer:由业务方主动拉取消息 DefaultMQPushConsumer:通过业务方注册回调方法,由metaq主动推送消息 共同点: 都是消费者,也都提供了start,shutdown方法(吐个槽,这种公用的接口应该MQConsumer接口中,而不是MQPullConsumer与MQPushConsumer各搞一个) 不同点: 具体消费模式不同,PullConsumer提供了各种获取消息的方法…
部署架构 消息存储 存储结构 MetaQ的存储结构是一种物理队列+逻辑队列的结构.如下图所示: Producer生产消息,根据消息的topic选择topic对应某一个分区,然后发送到这个分区对应的Broker:Consumer根据订阅的topic选择去topic的某一个分区拉取消息. MetaQ将消息存储在本地文件中,每个文件最大大小为1G,如果写入新的消息时,超过当前文件大小,则会自动新建一个文件.文件名称为起始字节大小.以起始字节大小命名并排序这些文件是有诸多好处的,当消费者要抓取某个起始偏…
一.Redis事务 1.概念 可以一次执行多个命令,本质是一组命令的集合.一个事务中的 所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 事务能做的事: 一个队列中,一次性.顺序性.排他性的执行一系列命令d 常用命令: DISCARD: 取消事务,放弃执行事务块内的所有命令: EXEC : 执行所有事务块内的命令: MULTI : 标记一个事务块的开始: WATCH key([key ....]) : 监视一个(或多个) key,如果在事务执行之前这个(或这些)key被其他…
在工业生产设计中,我们往往需要实现一个基于消息订阅的模式,用来对非定时的的消息进行监听订阅. 这种设计模式在 总线设计模式中得到体现.微软以前的WCF中实现了服务总线 ServiceBus的设计模式.然并卵.WCF已经好像是上个世纪的产物................ 基于事件订阅的模式,比如 EventBus类的组件产品.但是往往设计比较复杂. 如果依赖于 Redis做事件消息推送.那就大大简化了这种设计模式,而且性能也比较客观. Redis在 2.0之后的版本中 实现了 事件推送的  pu…
Apache Pulsar是一款由雅虎开发的类似于Kafka的企业级消息订阅系统,在2016将其开源,由Apach基金会孵化,现在已经成长为Apache基金会的顶级项目.Pulsar在雅虎内部已经运行了三年,服务于众多的应用,主要有雅虎邮箱.雅虎财务系统.雅虎运动.Flickr.Gemini广告平台以及雅虎分布式键值对存储系统Sherpa等. Pulsar相关概念. 为Pulsar提供数据的应用叫做生产者,而从Pulsar消费数据的应用被称为消费者,有时也称为订阅者.主题Topic是Pulsar…
本实例实现需求 在游戏SDK测试中,经常需要测试游戏中SDK的埋点日志是否接入正确.本实例通过抓包(客户端http/https 请求)来判定埋点日志是是否接入正确. 实现细节:使用django项目,后端采用python mitmdump 扩展脚本“log_handler.py”实时抓取与过滤4399SDK 客户端日志,将数据处理成约定需要的格式,保存和发布到redis中. 前端使用websocket连接,websocket服务端通过redis订阅对应游戏频道信息,实时输出游戏的客户端日志到web…