kafka 支持发布订阅
概述
一般消息队列的是实现是支持两种模式的,即点对点,还有一种是topic发布订阅者模式,比如ACTIVEMQ。KAFKA也支持这两种模式,但是实现的原理不一样。
KAFKA 的消息被读取后,并不是马上删除,这样就可以重复读取。kafka 正式利用这种特性实现发布订阅者模式。
即在发布消息的时候,发布一个topic,可以使用配置多个消费者来消费,消费者使用分组来实现。比如一个topic ,有两个分组的消费者订阅。
那么发布一个消息的时候,两个分组的消费者可以读取到此条消息。
实现
配置两组消费者。
分组1
<bean id="consumerProperties" class="java.util.HashMap">
<constructor-arg>
<map>
<!-- 配置kafka的broke -->
<entry key="bootstrap.servers" value="${kafka.brokerurl}"/>
<!-- 配置组-->
<entry key="group.id" value="group1"/>
<entry key="enable.auto.commit" value="true"/>
<entry key="auto.commit.interval.ms" value="1000"/>
<entry key="session.timeout.ms" value="30000"/>
<entry key="key.deserializer" value="org.apache.kafka.common.serialization.StringDeserializer"/>
<entry key="value.deserializer" value="com.redxun.jms.ObjectDeSerializer"/>
</map>
</constructor-arg>
</bean> <!-- 创建consumerFactory bean -->
<bean id="consumerFactory" class="org.springframework.kafka.core.DefaultKafkaConsumerFactory">
<constructor-arg>
<ref bean="consumerProperties"/>
</constructor-arg>
</bean>
注意 这个分组的ID 是 group1
分组2
<bean id="consumerProperties2" class="java.util.HashMap">
<constructor-arg>
<map>
<!-- 配置kafka的broke -->
<entry key="bootstrap.servers" value="${kafka.brokerurl}"/>
<!-- 配置组-->
<entry key="group.id" value="group2"/>
<entry key="enable.auto.commit" value="true"/>
<entry key="auto.commit.interval.ms" value="1000"/>
<entry key="session.timeout.ms" value="30000"/>
<entry key="key.deserializer" value="org.apache.kafka.common.serialization.StringDeserializer"/>
<entry key="value.deserializer" value="com.redxun.jms.ObjectDeSerializer"/>
</map>
</constructor-arg>
</bean> <!-- 创建consumerFactory bean -->
<bean id="consumerFactory2" class="org.springframework.kafka.core.DefaultKafkaConsumerFactory">
<constructor-arg>
<ref bean="consumerProperties2"/>
</constructor-arg>
</bean>
这里配置的分组是2 group2 。
我们使用代码测试发布消息:
IMessageProducer producer= MessageUtil.getProducer();
LogEntity ent=new LogEntity();
ent.setId("000000001");
ent.setIp("192.168.1.1");
ent.setAction("test");
producer.send("logMessageQueue", ent);
return "1";
我们在发布一个消息的时候,两个分组的消费者都读取到了这条消息,因此就实现了 发布订阅者模式。
kafka 支持发布订阅的更多相关文章
- Kafka(分布式发布-订阅消息系统)工作流程说明
Kafka系统架构Apache Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一种快速.可扩展的.设计内在就是分布式的,分区的和 ...
- kafka 基础知识梳理-kafka是一种高吞吐量的分布式发布订阅消息系统
一.kafka 简介 今社会各种应用系统诸如商业.社交.搜索.浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战: 如何收集这些巨大的信息 如何分析它 如何及时做到如上两点 ...
- 分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载
一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已经完成,在通常的情况下,开发人中都是在使用者B所使用 ...
- 基于.NET Socket Tcp的发布-订阅框架
基于.NET Socket Tcp的发布-订阅框架 一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已 ...
- redis的发布订阅模式pubsub
前言 redis支持发布订阅模式,在这个实现中,发送者(发送信息的客户端)不是将信息直接发送给特定的接收者(接收信息的客户端),而是将信息发送给频道(channel),然后由频道将信息转发给所有对这个 ...
- redis实现消息队列&发布/订阅模式使用
在项目中用到了redis作为缓存,再学习了ActiveMq之后想着用redis实现简单的消息队列,下面做记录. Redis的列表类型键可以用来实现队列,并且支持阻塞式读取,可以很容易的实现一个高性 ...
- 【9】JMicro微服务-发布订阅消息服务
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1. JMicro消息服务目前实现特性 a. JMicro只支持发布订阅消息服务,不支持队列式消息服务: b. 不支持消息持 ...
- redis(3)发布订阅
一.发布/订阅模式 在软件工程里面,发布/订阅是一种消息模式,这种模式旨在将消息发送者和消息接收者解耦.发送者不需要关心将消息发送给谁,接收者也不需要知道消息的发送者是谁.发送者将消息发布以后就结束动 ...
- Kafka 分布式的,基于发布/订阅的消息系统
Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能. 高吞吐量:即使是非常 ...
随机推荐
- vue 父组件使用子组件中的data或methods
1.调用子组件的时候 定义一个ref 2.在父组件里面通过 this.$refs.verify.属性 this.$refs.verify.方法
- Django的视图函数和路由系统中一些没有用过的小点
1.request对象 print("返回用户访问的url,但是不包括域名",request.path_info) print("返回请求的方法,全大写",re ...
- Bootstrap(5)栅格系统
一.移动设备优先 在 HTML5 的项目中,我们做了移动端的项目.它有一份非常重要的 meta,用于设置屏幕和设备等宽以及是否运行用户缩放,及缩放比例的问题. //分别为:屏幕宽度和设备一致.初始缩放 ...
- 针对appium的webdriver执行swipe无效的解决办法
self.driver.swipe(x1,y1,x2,y1,t) 当时代码里有如上这么一句,当时源码是这么说的: # convenience method added to Appium (NOT S ...
- echarts柱状图图例不显示的问题
如果想要图例有效果,legend中数据要和series中name的值保持一致,切记切记,这是我曾经遇到的坑,不保持一致是没有效果的
- python pyMysql 自定义异常 函数重载
# encoding='utf8'# auth:yanxiatingyu#2018.7.24 import pymysql __all__ = ['Mymysql'] class MyExcept(E ...
- 一位大牛整理的Python资源
Python基本安装: * http://www.python.org/ 官方标准Python开发包和支持环境,同时也是Python的官方网站: * http://www.activestate ...
- UOJ 274 温暖会指引我们前进 - LCT
Solution 更新掉路径上温暖度最小的边就可以了~ Code #include<cstdio> #include<cstring> #include<algorith ...
- 一种基于URL数据源的WEB报表插件
完全支持所见所得的报表设计, 支持 PHP ,Java 等所有支持JSON格式的后端. 立即下载测试版本 需要正式版本?请QQ联系:1565498246 或者留言
- jmeter对需要登录的接口进行性能测测试
只需要一步: https://www.testwo.com/blog/7253