分区跟消费者的负载均衡机制有很大关系,具体见集群和负载均衡。
就是meta的服务端或者说服务器,在消息中间件中也通常称为broker。
消费者可以是多个消费者共同消费一个topic下的消息,每个消费者消费部分消息。这些消费者就组成一个分组,拥有同一个分组名称,通常也称为消费者集群
为了说明metaq的使用,阿堂附上一个测试demo与大家分享,关于集群模式,阿堂会在下篇文章中继续分享
下面是阿堂在Local单机模式的测试效果图
1.安装,启动zookeeper
2.安装启动metaq服务器
public class Productor {
public static void main(String[] args) throws Exception {
final MetaClientConfig metaClientConfig = new MetaClientConfig();
final ZKConfig zkConfig = new ZKConfig();
zkConfig.zkConnect = "192.168.1.101:2181";
metaClientConfig.setZkConfig(zkConfig);
MessageProducer producer = sessionFactory.createProducer();
final String topic = "test";
producer.publish(topic);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = "网络时空(阿堂)";
while ((line = reader.readLine()) != null) {
// send message
SendResult sendResult = producer.sendMessage(new Message(topic, line.getBytes()));
// check result
if (!sendResult.isSuccess()) {
System.err.println("Send message failed,error message:" + sendResult.getErrorMessage());
}
else {
System.out.println("Send message successfully,sent to " + sendResult.getPartition());
// System.out.println("分区 ="+sendResult.getPartition().getPartition());
// System.out.println("broker ="+sendResult.getPartition().getBrokerId());
}
}
}
}
---------------------------------------------------------------
public class Consumer {
public static void main(String[] args) throws Exception {
final MetaClientConfig metaClientConfig = new MetaClientConfig();
final ZKConfig zkConfig = new ZKConfig();
zkConfig.zkConnect = "192.168.1.101:2181";
metaClientConfig.setZkConfig(zkConfig);
MessageSessionFactory sessionFactory = new MetaMessageSessionFactory(metaClientConfig);
final String topic = "test";
final String group = "meta-example";
MessageConsumer consumer = sessionFactory.createConsumer(new ConsumerConfig(group));
consumer.subscribe(topic, 1024 * 100, new MessageListener() {
public void recieveMessages(Message message) {
System.out.println("Receive message " + new String(message.getData()));
// System.out.println("分区 = "+message.getPartition().getPartition());
// System.out.println("broker = "+message.getPartition().getBrokerId());
}
public Executor getExecutor() {
return null;
}
});
consumer.completeSubscribe();
}
}