RocketMq --consumer自动实现负载均衡
这边使用一个producer和两个consumer是实现负载均衡。
看一下代码示例
- package com.alibaba.rocketmq.example.message.model;
- import com.alibaba.rocketmq.client.exception.MQBrokerException;
- import com.alibaba.rocketmq.client.exception.MQClientException;
- import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
- import com.alibaba.rocketmq.client.producer.SendResult;
- import com.alibaba.rocketmq.common.message.Message;
- import com.alibaba.rocketmq.remoting.exception.RemotingException;
- /**
- * @author : Jixiaohu
- * @Date : 2018-04-19.
- * @Time : 9:20.
- * @Description :
- */
- public class Producer {
- public static void main(String[] args) throws MQClientException, InterruptedException, MQBrokerException {
- String groupName = "message_producer";
- DefaultMQProducer producer = new DefaultMQProducer(groupName);
- producer.setNamesrvAddr("192.168.1.114:9876;192.168.2.2:9876");
- producer.start();
- try {
- for (int i = 1; i <= 100; i++) {
- Message msg = new Message("Topic1", "Tag1",
- ("Hello RoctetMq : " + i).getBytes());
- SendResult sendResult = producer.send(msg);
- //增加一个超时参数,单位为毫秒
- // SendResult sendResult = producer.send(msg, 1000);
- System.out.println(sendResult);
- }
- } catch (RemotingException e) {
- e.printStackTrace();
- Thread.sleep(1000);
- }
- producer.shutdown();
- }
- }
- package com.alibaba.rocketmq.example.message.model;
- import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
- import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
- import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
- import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
- import com.alibaba.rocketmq.common.message.MessageExt;
- import java.io.UnsupportedEncodingException;
- import java.util.List;
- /**
- * @author : Jixiaohu
- * @Date : 2018-04-19.
- * @Time : 19:19.
- * @Description :
- */
- public class Consumer1 {
- public Consumer1() {
- try {
- String groupName = "message_consumer";
- DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(groupName);
- consumer.setNamesrvAddr("192.168.1.114:9876;192.168.2.2:9876");
- consumer.subscribe("Topic1", "Tag1 || Tag2 || Tag3");
- //广播模式下需要先启动consumer
- //consumer.setMessageModel(MessageModel.BROADCASTING);
- consumer.registerMessageListener(new Listener());
- consumer.start();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- class Listener implements MessageListenerConcurrently {
- @Override
- public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
- try {
- for (MessageExt msg : list) {
- String topic = msg.getTopic();
- String msgBody = new String(msg.getBody(), "utf-8");
- String tags = msg.getTags();
- System.out.println("收到信息:" + " topic:" + topic + " msgBody:" + msgBody + " tags:" + tags );
- }
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- return ConsumeConcurrentlyStatus.RECONSUME_LATER;
- }
- return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
- }
- }
- public static void main(String[] args) {
- Consumer1 c1 = new Consumer1();
- System.out.println("consumer1 is start");
- }
- }
- package com.alibaba.rocketmq.example.message.model;
- import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
- import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
- import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
- import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
- import com.alibaba.rocketmq.common.message.MessageExt;
- import java.io.UnsupportedEncodingException;
- import java.util.List;
- /**
- * @author : Jixiaohu
- * @Date : 2018-04-19.
- * @Time : 19:19.
- * @Description :
- */
- public class Consumer2 {
- public Consumer2() {
- try {
- String groupName = "message_consumer";
- DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(groupName);
- consumer.setNamesrvAddr("192.168.1.114:9876;192.168.2.2:9876");
- consumer.subscribe("Topic1", "Tag1 || Tag2 || Tag3");
- //广播模式下需要先启动consumer
- //consumer.setMessageModel(MessageModel.BROADCASTING);
- consumer.registerMessageListener(new Listener());
- consumer.start();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- class Listener implements MessageListenerConcurrently {
- @Override
- public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
- try {
- for (MessageExt msg : list) {
- String topic = msg.getTopic();
- String msgBody = new String(msg.getBody(), "utf-8");
- String tags = msg.getTags();
- System.out.println("收到信息:" + " topic:" + topic + " msgBody:" + msgBody + " tags:" + tags );
- }
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- return ConsumeConcurrentlyStatus.RECONSUME_LATER;
- }
- return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
- }
- }
- public static void main(String[] args) {
- Consumer2 c1 = new Consumer2();
- System.out.println("consumer2 is start");
- }
- }
运行一下项目,先启动两个consumer,在启动producer,
查看一下两个consumer运行结果:
100条消息,推送到不同的consumer进行消费,无需搭建别的东西。
如果需要使用广播模式,就把 consumer1和consumer2的广播模式的注释放开,下面发送10条消息,然后看一下打印的结果
两个consumer各自收到10条消息,这种就是广播模式。
RocketMq --consumer自动实现负载均衡的更多相关文章
- Ubuntu下配置 keepalived+nginx+tomcat 负载均衡
本文力图阐述在 Ubuntu Server 环境下使用 Keepalived + Nginx + Tomcat 搭建高可用负载均衡环境的操作步骤和简约配置,这里不涉及性能调优.先说一下他们各自扮演的角 ...
- 剖析HBase负载均衡和性能指标
1.概述 在分布式系统中,负载均衡是一个非常重要的功能,在HBase中通过Region的数量来实现负载均衡,HBase中可以通过hbase.master.loadbalancer.class来实现自定 ...
- 深度剖析HBase负载均衡和性能指标
深度剖析HBase负载均衡和性能指标 在分布式系统中,负载均衡是一个非常重要的功能,HBase通过Region的数量实现负载均衡,即通过hbase.master.loadbalancer.class实 ...
- 负载均衡算法,轮询方式 大话设计模式之工厂模式 C#
负载均衡算法,轮询方式 2018-04-13 17:37 by 天才卧龙, 13 阅读, 0 评论, 收藏, 编辑 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现 ...
- 干货 | 京东云应用负载均衡(ALB)多功能实操
应用负载均衡(Application Load Balancer,简称ALB)是京东云自主研发的一款七层负载均衡产品,主要面向HTTP和HTTPS流量的WEB应用程序,提供灵活的功能配置.应用负载均衡 ...
- HDFS 02 - HDFS 的机制:副本机制、机架感知机制、负载均衡机制
目录 1 - HDFS 的副本机制 2 - HDFS 的机架感知机制 3 - HDFS 的负载均衡机制 参考资料 版权声明 1 - HDFS 的副本机制 HDFS 中的文件,在物理上都是以分块(blo ...
- springcloud 负载均衡之 ribbon。
一.什么是 ribbon? 就是负载均衡! nginx也是负载均衡 1.1 !!!!ribbon和nginx的区别是什么? /* nginx: 正向代理(和客户端连在一起) 反向代理(和服务器端连在一 ...
- RocketMQ之八:水平扩展及负载均衡详解
RocketMQ是一个分布式具有高度可扩展性的消息中间件.本文旨在探索在broker端,生产端,以及消费端是如何做到横向扩展以及负载均衡的. NameServer集群 提供轻量级的服务发现和路由.每个 ...
- RocketMQ-2.RocketMQ的负载均衡
目录 RocketMQ的负载均衡 producer对MessageQueue的负载均衡 producer负载均衡 系统计算路由MessageQueue 自定义路由MessageQueue Consum ...
随机推荐
- WDA-3-ALV查询
主要是梳理下WebDynpro For ABAP开发过程: 1.创建WebDynpro组件 2.创建WebDynpro应用 1.创建WebDynpro组件 1.1创建 路径:选择Package--&g ...
- 集合,ArrayList
用集合代替数组: Console.Write("请输入人数:"); int renshu = int.Parse(Console.ReadLine()); ArrayList ch ...
- Leetcode 题解 Combinations:回溯+求排列组合
罗列出从n中取k个数的组合数组. 首先,求C(n,k)这个实现,很粗糙,溢出也不考虑,好的方法也不考虑.笨蛋.心乱,上来就写.. 另外,发现在递归中,不能申请太大的数组?貌似不是这个问题,是我自己越界 ...
- pgsql restart
/etc/init.d/postgresql restart
- jquery接触初级-----juqery DOM操作实例,动态图片显示
1. 要求:对一个a标签元素,当鼠标操作,移入时,显示a标签title属性的信息,鼠标移出时,隐藏a标签属性的title属性信息 a 标签本身的title 属性具有自我显示的特性,但是这个特性比较慢, ...
- 解决linux中ssh登录Warning:Permanently added (RSA) to the list of known hosts
原因: 在执行scp id_rsa.pub root@hostname:/root/.ssh这一步时,没在本机的/root/.ssh下生成known_hosts文件. 解决方案: vi /etc/ss ...
- 一小段测试atof的代码
#include <stdio.h> //#include <stdlib.h> double a=0; int main(int argc, char *argv[]) { ...
- kvm配置USB直通
参照:https://www.linuxidc.com/Linux/2014-12/110919.htm WebVirMgr界面是没有直接的途径了,只能靠修改xml文件,在<device> ...
- 自行编译mwan加入openwrt里
参考源文:http://www.right.com.cn/forum/thread-124449-1-1.html 本例以 opoenwrt 12.09正式版为例,原软件来自openwrt 英文论坛: ...
- JS实现简单的运行代码 & 侧边广告
/* JS实现简单的运行代码功能 */<!doctype html> <html> <head> <meta charset="utf-8" ...