网站备案 如何填,网页设计大赛演讲稿,网站个人空间,网站开发图片框消息过滤 1 ) 简单消息过滤
/*** 订阅指定topic下tags分别等于 TagA 或 TagC 或 TagD
*/consumer.subscribe(TopicTest1, TagA || TagC || TagD);如以上代码所示#xff0c;简单消息过滤通过指定多个 Tag 来过滤消息#xff0c;过滤的动作在服务器进…消息过滤 1 ) 简单消息过滤
/*** 订阅指定topic下tags分别等于 TagA 或 TagC 或 TagD
*/consumer.subscribe(TopicTest1, TagA || TagC || TagD);如以上代码所示简单消息过滤通过指定多个 Tag 来过滤消息过滤的动作在服务器进行
2 ) 高级消息过滤 Broker 所在的机器会启劢多个 FilterServer 过滤迕程 Consumer 启劢后会吐 FilterServer 上传一个过滤的 Java 类 Consumer 从 FilterServer 拉消息FilterServer 将请求转发给 BrokerFilterServer 从 Broker 收到消息后按照 Consumer 上传的 Java 过滤程序做过滤过滤完成后返回给 Consumer 总结 使用 CPU 资源来换取网卡流量资源FilterServer 与 Broker 部署在同一台机器数据通过本地回环通信不走网卡一台 Broker 部署多个 FilterServer充分利用 CPU 资源因为单个 JVM 难以全面利用高配的物理机 CPU 资源因为过滤代码使用 Java 语言来编写应用几乎可以做任意形式的服务器端消息过滤例如通过 Message Header 进行过滤甚至可以按照 Message Body 进行过滤使用 Java 语言进行作为过滤表达式是一个双刃剑方便了应用的过滤操作但是带来了服务器端的安全风险。需要应用来保证过滤代码安全例如在过滤程序里尽可能不做申请大内存创建线程等操作。避免 Broker 服务器发生资源泄漏
通信组件
RocketMQ 通信组件使用了 Netty-4.0.9.Final在之上做了简单的协议封装
1 网络协议 大端 4 个字节整数等于 2、3、4 长度总和大端 4 个字节整数等于 3 的长度使用 json 序列化数据应用自定义二进制序列化数据
Header 格式{code: 0,language: JAVA,version: 0,opaque: 0,flag: 1,remark: hello, I am respponse /127.0.0.1:27603,extFields: {count: 0,messageTitle: HelloMessageTitle}
}Header 字段名类型RequestResponsecode整数请求操作代码请求接收方根据不同的代码做不同的操作应答结果代码0 表示成功 非 0 表示各种错误代码language字符串请求发起方实现语言默认JAVA应答接收方实现语言version整数请求发起方程序版本应答接收方程序版本opaque整数请求发起方在同一连接上不同的请求标识代码多线程连接复用使用应答方不做修改直接返回flag整数通信局的标志位通信局的标志位remark字符串传输自定义文本信息错误详细描述信息extFieldsHashMapString,String请求自定义字段应答自定义字段
2 心跳处理
通信组件本身不处理心跳由上局进行心跳处理
3 连接复用
同一个网络连接客户端多个线程可以同时发送请求应答响应通过 header 中的 opaque 字段来标识
4 超时连接
如果某个连接超过特定时间没有活动无读写事件则自动关闭此连接并通知上层业务清除连接对应的注册信息
RocketMQ 服务发现Name Server
Name Server 是专为 RocketMQ 设计的轻量级名称服务代码小于 1000 行具有简单、可集群横向扩展、无状态等特点将要支持的主备自动切换功能会强依赖 Name Server