RabbitMQ大名鼎鼎, 其networking 部分经常被众多Erlang 程序员, 爱好者分析. 小的时候就见到很多人写过这方面的blog, 比如:

1, http://www.blogjava.net/killme2008/archive/2009/11/29/304079.html

2, http://jzhihui.iteye.com/blog/1544779

基本上就是很简单明了的结构。

RabbitMQ networking 监控树结构

使用observer 来查看RabbitMQ networking 的监控树结构, 大致是这样的:

其中:

1, rabbit_net_sup 是整个RabbitMQ的 主supervisor 进程

2, 进程<0.47.0> 是一个实例的tcp_listener_sup, 因为RabbitMQ 的networking 允许可以同时listen 多个端口, 所以此处的tcp_listener_sup 是匿名进程

3, 进程<0.49.0> 是一个实例的listen 进程, 负责监听端口,并在tcp_acceptor_sup 监控进程下start_child 执行数量的acceptor 进程

4, tcp_acceptor_sup_:::19000 是所有acceptor 进程的监控进程

5, 进程<0.50.0> 是实例的acceptor 进程, 负责异步接收新建立的socket 并执行 OnConnect 函数, 在rabbit_tcp_client_sup 监控进程下创建client 进程

6, <0.267.0>, <0.268.0>, <0.270.0> 是client 进程, 每个client 进程对应一个socket

在实际的RabbitMQ 中, client 进程是一个supervisor 进程, 其中包包括一个rabbit_reader 进程和一个 helper 进程

RabbitMQ networking 代码结构

为了比较清晰的学习下这部分的代码姿势, 我做了一个简单的代码抽离, 将RabbitMQ 的networking 的代码单独出来一个application. 代码module 大致是这个样子的:

(哈哈, sublime 要比emacs 轻一些, 不用emacs 后, 我的电脑轻了不少)

这其中:

1, file_handle_cache, gen_server2 是辅助性的module

2, rabbit_net_app 是application的 start, 并boot net

boot net 的流程主要分为三个部分:

2.1 将epmd 分配给本node 的端口, 写入mnesia

2.2 启动rabbit_tcp_client_sup 并声明其工作子进程

2.3 启动tcp_listener_sup, tcp_listener_sup 会先后start tcp_acceptor_sup_:::19000 进程和listen 进程, tcp_acceptor_sup_:::19000 进程会声明自己的子工作进程(也就是acceptor 进程), listen 进程会监听端口, 并在tcp_acceptor_sup_:::19000 进程下start_child 指定数量的acceptor 进程

社区相关

在社区,有不少人用RabbitMQ的networking 做了一些事情,比如最近和小伙伴讨论比较多的esockd , 大致看来, 作者是以RabbitMQ 的networking 作为蓝本, 在此基础上做了一些代码结构的调整.

总结

epmd 可扩展性阅读: http://blog.yufeng.info/archives/539

rabbitmq -- networking的更多相关文章

  1. emqtt 1 (初初初初稿)

    第一篇,先简单分析一下整个emqtt 的大致结构,包括两个部分: 1.message packet 类型 2.message 流向 message packet 类型 P1:mqtt_packet 的 ...

  2. 分享 rabbitMQ入门详解

    原文地址http://blog.csdn.net/cugb1004101218/article/details/21243927 目录(?)[-] rabbitMQ说明文档 rabbitMQ是什么 消 ...

  3. 【RabbitMQ】CentOS安装RabbitMQ,及简单的Java客户端连接

    在CentOS安装 因Rabbit MQ使用Erlang,所以需要先安装Erlang,安装过程中可能会遇到种种问题,可参考CentOS 6.5安装Erlang/OTP 17.0.然后就可以安装MQ了. ...

  4. RabbitMq 集群配置

    1. RabbitMQ 所需的附属安装包 1.1  openGL安装 执行命令: [root@localhost local]# yum install mesa-libGL-devel mesa-l ...

  5. RabbitMQ配置文件

    配置文件Config 在Web的可视化管理界面中可以看到一些文件的路径 比如 Config文件的地址 数据库存放的文件夹 log文件的地址 进入到这个文件夹会发现有这些文件,其中example是con ...

  6. NET下RabbitMQ实践[配置篇]

    这个系列目前计划写四篇,分别是配置,示例,WCF发布,实战.当然不排除加餐情况.  介绍: rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统.他遵循Mozilla Publi ...

  7. openstack私有云布署实践【6 RabbitMQ】

    生产环境建议在集群三台controller上做rabbitmq 使用到队列的openstack组件 OpenStack Compute OpenStack Block Storage OpenStac ...

  8. openstack controller ha测试环境搭建记录(五)——配置rabbitmq集群

    配置rabbitmq集群的步骤非常简单,因为其本身含集群功能,参考openstack官网文档:http://docs.openstack.org/ha-guide/controller-ha-rabb ...

  9. rabbitmq.config配置文件

    %% -*- mode: erlang -*-%% -------------------------------------------------------------------------- ...

随机推荐

  1. ubuntu+vm+ftp

    为了将windows下的文件传到linux中去,使用FZ来做服务器,在linux中进入ftp状态获取. 1.下载FileZilla服务器,在windows下安装就行了(试过汉化插件,用了就报错,所以还 ...

  2. awk之腾迅面试题1

    1.题目如下: 3 5 6 72 3 1 04 5 6 92 3 4 42 2 1 04 5 0 9假如把2列和3列的值作为新的第5列,第5列的平均值为avg5,求第5列中大于avg5的行数.  aw ...

  3. Android中设置自己软件的铃声+震动

    有时候一些通讯软件需要这些个功能,比如说收到短信,通知等,要求手机发出铃声,或震动,或发光以提示用户知晓. 往往手机都是有默认设置的,比如说用户开启了铃声+震动:只铃声不震动:完全静音等等... 这个 ...

  4. Kubernetes TLS认证

    转自: https://mritd.me/2018/01/07/kubernetes-tls-bootstrapping-note/ 前段时间撸了一会 Kubernetes 官方文档,在查看 TLS ...

  5. Druid数据库连接池的一般使用

    据说:阿里的Druid这款产品,是目前最好用的数据库池产品,下面就来看下怎么在我们项目中去使用它吧. 项目背景:使用的是SpringMvc+Spring+mybatis 在ssm框架里面使用数据连接池 ...

  6. javascript(jquery)_匿名函数

    一.什么是匿名函数 匿名函数:就是没有函数名的函数 二.为什么使用匿名函数 1.最大的用处就是创建闭包 三.匿名函数定义(怎么使用匿名函数) 1.这种方法使用了Function构造函数,把参数列表和函 ...

  7. 语音03_TTS_C#示例代码

    参考网址: (1)TTS-零基础入门-10分钟教你做一个语音功能 http://blog.csdn.net/u010176014/article/details/47326413 (2).TTS-零基 ...

  8. SQL Server 2016 —— 聚集列存储索引的功能增强

    作者 Jonathan Allen,译者         邵思华         发布于     2015年6月14日   聚集列存储索引(CC Index)是SQL Server 2014中两大最引 ...

  9. sql处理数据库锁的存储过程

    /*--处理死锁 查看当前进程,或死锁进程,并能自动杀掉死进程 因为是针对死的,所以如果有死锁进程,只能查看死锁进程 当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程 --邹建 2004.4 ...

  10. MSDN 单机 MVC 帮助文档

    因为微软的mvc框架也是从开源框架演变而来的,所以微软没把mvc帮助文档放到单击帮助文档中.sososos下载好msdn单机帮助后,却找不到 System.Web.MVC 等命名空间的东西. 解决办法 ...