1.订阅者的声明方式
我们以spring组件化的方式,声明一个消息订阅者,对于消息订阅者关心的主要有:
topic: 一级消息类型(又名消息主题)。如TRADE
消息类型:二级消息类型,区别同一Topic主题下的不同类型的消息; 如:TRADE(交易主题)下有
2300-trade-created-done(交易创建)
group信息:又称组名,根据groupId来识别客户端机器, 配置为同一groupId视为同一集群的机器 .因此,
各个业务之间,发送方和订阅方之间的GroupId不能重复
示例如下:
<bean id="langyanCcSubscriber" class="com.taobao.hsf.notify.client.NotifyManagerBean" init-method="init">
<property name="subscribeMessages">
<map>
<entry key="langyan-cc">
<map>
<entry key="NM-fission-cc-failed">
<bean class="com.taobao.hsf.notify.client.SubscriptMsgDetailInfo" />
</entry>
</map>
</entry>
</map>
</property>
<property name="groupId" value="S-LY-fission-cc" />
<property name="messageListener" ref="langyanCcMessageListener" />
</bean>
2.订阅者的实例化流程
基本流程图如下:
该流程主要包括以下以下几个核心类:
- NotifyMessageBean:这是消息订阅者spring的组装类
- MessageReceiver:这是消息订阅处理类,当只有一个topic时,一个消息类型时,可以主需要声明一个receiver
- MessageWorker:这是某一类型消息的处理组装类:消息的转换类和消息的处理类
- MessageProcessor:消息的处理类
3.订阅者的连接管理
创建连接的流程如下:
有以下几个核心的类:
- DefaultNotifyManager:是订阅者实例化的核心类,同时初始化网络连接的客户端
- DefaultRemotingService:消息的网络通讯服务,根据topic拉取服务端地址,建立连接
- NewUrlManager:根据url创建连接