前言
从RocketMQ启动来分析,namesrv的功能就是提供broker的注册以及client通过topic来获取routing的信息,从broker获取相应的操作过程,简单的介绍还是从源码的角度来分析,本节主要是对namesrv的主要功能,包括默认请求处理方式,集群请求处理方式,以及路由信息管理,键值对配置管理等来入手,同样也是从官网提供的mockito用例入手。
KVConfig包
namesrv的功能其中之一就是提供broker的注册以及路由的管理,而broker的注册信息就从这个包里体现出关联关系,譬如下面从kvconfig包来分析定义的KVConfig的包装类信息,从源码来看是提供了一个包装类,这个类同样是实现了定义的序列化接口RemotingSerializable
从mockito的用例分析,wraper类针对namesrv的注册功能,提供了键值对的方式,约定是broker-xxxx,topic-xxxx等方式提供wraper之后的序列化处理
public class KVConfigSerializeWrapperTest {
private KVConfigSerializeWrapper kvConfigSerializeWrapper;
@Before
public void setup() throws Exception {
kvConfigSerializeWrapper = new KVConfigSerializeWrapper();
}
@Test
public void testEncodeAndDecode() {
HashMap<String, HashMap<String, String>> result = new HashMap<>();
HashMap<String, String> kvs = new HashMap<>();
kvs.put("broker-name", "default-broker");
kvs.put("topic-name", "default-topic");
kvs.put("cid", "default-consumer-name");
result.put(NamesrvUtil.NAMESPACE_ORDER_TOPIC_CONFIG, kvs);
kvConfigSerializeWrapper.setConfigTable(result);
byte[] serializeByte = KVConfigSerializeWrapper.encode(kvConfigSerializeWrapper);
assertThat(serializeByte).isNotNull();
KVConfigSerializeWrapper deserializeObject = KVConfigSerializeWrapper.decode(serializeByte, KVConfigSerializeWrapper.class);
assertThat(deserializeObject.getConfigTable()).containsKey(NamesrvUtil.NAMESPACE_ORDER_TOPIC_CONFIG);
assertThat(deserializeO