4.6 Topic
概要:
Hazelcast 提供了发布消息给多个消费者的分布式机制.即众所周知的publish/subscribe(pub/sub)消息模型.
在cluster层面进行生产及消费操作.在topic中,当一个新的member加入后,你需要为其添加一个监听器,实际上是为在cluster中的一些member注册消息的发布机制.
NOTE: Publish operation is async. It does not wait for operations to run in remote nodes, it works as fire and forget.
简单的topic例子
import com.hazelcast.core.Topic; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.MessageListener; public class Sample implements MessageListener<MyEvent> { public static void main( String[] args ) { Sample sample = new Sample(); HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(); ITopic topic = hazelcastInstance.getTopic( "default" ); topic.addMessageListener( sample ); topic.publish( new MyEvent() ); } public void onMessage( Message<MyEvent> message ) { MyEvent myEvent = message.getMessageObject(); System.out.println( "Message received = " + myEvent.toString() ); if ( myEvent.isHeavyweight() ) { messageExecutor.execute( new Runnable() { public void run() { doHeavyweightStuff( myEvent ); } } ); } } // ... private final Executor messageExecutor = Executors.newSingleThreadExecutor(); }
4.6.2 统计 Statistics
在Topic中有两种统计变量可以进行访问查询操作.这些值是由本地成员负责维护的,一般为增加.
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(); ITopic<Object> myTopic = hazelcastInstance.getTopic( "myTopicName" ); myTopic.getLocalTopicStats().getPublishOperationCount(); myTopic.getLocalTopicStats().getReceiveOperationCount();
getPublishOperationCount()
and getReceiveOperationCount
( ) 方法会分别返回在此节点启动后生产的消息数量以及接收到的消息数量.请注意,这些值是不会被备份的,此节点关闭后,这些值也会丢失.
关于Topic的设置特性请参照 Topic Configuration.
NOTE: These statistics values can be also viewed in Management Center. Please see Topics.
4.6.3 内部构件 Internals
每一个节点拥有一个本cluster中所有节点的注册列表.当Topic注册一个新的节点时,它将给本cluster中的所有成员发送一条注册信息.同样的,当一个新节点加入cluster中时,它将会收到截止到它注册时,本cluster中所有节点的注册信息.
配置globalOrderEnabled可改变topic中的节点行为.
- If
globalOrderEnabled
is disabled:
消息将是有序的,举个例子,如果消费者发布一条消息时,它会将一条消息推送到order队列.假如cluster成员M发布了很多消息 m1, m2, m3,...,mn到topic T,接下来Hazelcast会确保所有topic T中的消费者接收到的信息顺序也为m1, m2, m3,...,mn.
这就是它的工作原理.比如说我们现在有三个节点(node1,node2,node3),node1和node2注册到名为news的topic中.请注意,所有的三个节点都会知道node1和node2注册到了topic news中喔.
在这个例子中node1推送了两条消息:a1和a2.node3推送了两条消息:c1和c2.当node1和node3发布消息的时候,他们会检查他们各自本地的注册节点清单.他们发现node1和node2在这个列表中.于是,他们将消息发送到这些在列表中的节点.下面是他们可能受到的消息顺序:
Node1 -> c1, a1, a2, c2
Node2 -> c1, c2, a1, a2
- If
globalOrderEnabled
is enabled:
当globalOrderEnabled设置为可用时,它将保证所有监听相同topic的节点,收到的消息顺序相同.
我们再看看这次会怎么样.现在我们还是有三个节点(node1,node2,node3),node1和node2也注册到名为news的topic中.注意,所有的节点都知道node1和node2注册到了news中.
在这个例子里,node1发布两天消息:a1,a2.node3发布两天消息:c1,c2.当一个节点通过topic news发布消息时,它首先会计算news的id与哪一个分区相符.接下来给该分区的拥有者发送一个操作,于是该节点发布消息.我们假设news与node2拥有的分区一致.接下来node1
和node3首先将发送给node2所有信息.假设将用以下顺序发送信息:
Node1 -> a1, c1, a2, c2
此时,node2将把这些小心发送给本地存储的节点注册列表中的各个节点.它实际上会将这些消息发送给node1和node2(它将为它本身建立一个分配机制).
Node1 -> a1, c1, a2, c2
Node2 -> a1, c1, a2, c2
使用这种方式时,会保证所有节点接收到消息事件的顺序相同.
在这两种情况下, 都会使用EventService的StripedExecutor来分配接收到的信息.对于Hazelcast中的所有事件,都通过StripedExecutor来处理,以保证它们是有序的.
In StripedExecutor
, there are as much threads specified in the property hazelcast.event.thread.count
(default is 5). For a specific event source (for topic, for a particular topic name), hash of that source's name % 5gives the ID of responsible thread. Note that, there can be another event source (entry listener of a map, item listener of a collection, etc.) corresponding to the same thread. In order not to make other messages to block, heavy process should not be done in this thread. If there is a time consuming work needs to be done, the work should be handed over to another thread. Please see Sample Topic Code.
4.6.4 Topic配置 Topic Configuration
注解式配置:
<hazelcast> ... <topic name="yourTopicName"> <global-ordering-enabled>true</global-ordering-enabled> <statistics-enabled>true</statistics-enabled> <message-listeners> <message-listener>MessageListenerImpl</message-listener> </message-listeners> </topic> ... </hazelcast>
在程序中配置:
TopicConfig topicConfig = new TopicConfig(); topicConfig.setGlobalOrderingEnabled( true ); topicConfig.setStatisticsEnabled( true ); topicConfig.setName( "yourTopicName" ); MessageListener<String> implementation = new MessageListener<String>() { @Override public void onMessage( Message<String> message ) { // process the message } }; topicConfig.addMessageListenerConfig( new ListenerConfig( implementation ) ); HazelcastInstance instance = Hazelcast.newHazelcastInstance()
缺省值:
-
Global ordering is false, meaning there is no global order guarantee by default.
-
Statistics are true, meaning statistics are calculated by default.
Topic有关的设置,但不是topic特有的配置变量:
-
hazelcast.event.queue.capacity
: default value is 1,000,000 -
hazelcast.event.queue.timeout.millis
: default value is 250 -
hazelcast.event.thread.count
: default value is 5
RELATED INFORMATION
For description of these parameters, please see Global Event Configuration
相关推荐
2023年全国大学生英语竞赛样题(C类)样题答案及听力原文
出纳考核表
基于多种天气因素的光伏电站太阳能辐射量预测系统——采用人工神经网络与离线优化算法,MATLAB代码:考虑多种天气条件下光伏电站太阳能辐射量预测 关键词:辐射量预测 光伏预测 多种天气因素 参考文档:《Solar Radiation Prediction and Energy Allocation for Energy Harvesting Base Stations》 仿真平台:MATLAB+CPLEX 平台 优势:代码具有一定的深度和创新性,注释清晰,非烂大街的代码,非常精品 主要内容:代码主要做的是如何利用预测光伏电站太阳能辐射量的问题,利用人工神经网络对对其内太阳辐射量进行预测,并对无云天气以及多云天气进行了分别讨论,与线性模型相比该模型具有更好的性能,除此之外,代码还研究了太阳能的分配问题,采用离线优化算法和四种在线启发式算法分别进行分配策略的优化,并利用太阳辐射数据评估了算法的性能。 该代码适合新手学习以及在此基础上进行拓展,代码质量非常高,出图效果极佳 ,核心关键词: 1. 光伏电站太阳能辐射量预测 2. 多种天气因素 3. 人工神经网络 4. 预测模型 5. 线性
数据结构实验实习指导书(c语言)
"lyh不会打代码"生存小有戏改版
站群系统/泛目录站群源码/泛站群cms系统【小说泛目录站群源码】 效果截图和演示https://www.lxsjfx.cn/3181.html 绿茶小说站群2.x-秒收隔天速出权重-小说流量稳定收割机-精品轻量级PHP站群系统站群系统,小说行业专用引流精品站群,绿茶小说站群为独立站群系统(无需依托CMS),独立的整篇小说优化内容库(拒绝句子拼凑),模板自适应PC端和移动端,流量一起做! 1、绿茶小说站群为独立站群系统(无需依托CMS) 2、对域名要求不高,百元域名均可操作 3、独立的首页、列表页、小说阅读页 4、独立的整篇小说优化内容库(拒绝句子拼凑) 5、可自定页面后缀(html、shtml、xml…..) 6、拒绝全站404跳转到内容页 7、还有强大的网站XML地图功能,便于链接提交 8、模板自适应PC端和移动端,流量一起做! 站群系统/泛目录站群源码/泛站群cms系统【小说泛目录站群源码】
IQC检验员(来料检验员)绩效考核表
2024年全球AI应用趋势年度报告
安全生产绩效考核表
04-【标准制度】公司 KPI 绩效考核流程
第14讲:深入理解指针(4)
考虑用户舒适度的冷热电多能互补综合能源系统优化调度模型:结合PMV衡量与碳排放交易机制的MATLAB仿真实现,考虑用户舒适度的冷热电多能互补综合能源系统优化调度 MATLAB代码:考虑用户舒适度的冷热电多能互补综合能源系统优化调度 关键词:用户舒适度 综合能源 PMV 优化调度 参考文档:《冷热电气多能互补的微能源网鲁棒优化调度》基础模型加舒适度部分模型; 仿真平台:MATLAB+yalmip+cplex 主要内容:代码主要做的是考虑用户舒适度的冷热电多能互补综合能源系统优化调度模型,在传统的冷热电联供型综合能源系统的基础上,进一步考虑了热惯性以及用户的舒适度,并用预测平均投票数PMV对用户的舒适度进行衡量,且通过改变PMV的数值,可以对比不同舒适度要求对于综合能源系统调度结果的影响。 同时,代码还补充性的考虑了碳排放交易机制,并设置经济性最优以及碳排放最优两种对比场景,从而丰富算例,效果非常明显。 使用matlab+yalmip+cplex进行代码的 ,考虑用户舒适度; 综合能源系统; PMV; 优化调度; 冷热电多能互补; 碳排放交易机制。,考虑用户舒适度与碳排放交易的冷热电多能
内容概要:本文详细阐述了利用ANSI转义码在Xshell脚本中进行光标的灵活操控方法。介绍了从光标的隐藏、定位(特定行/列)、保存位置、复位、清除以及显示控制的基本命令,重点描述了如何使用以上提到的功能构建实用的UI组件——文本模式下工作的进度条。文中提供的简单实例演示了一个完整的循环逻辑,它能动态刷新视图,在每一次迭代中根据程序实际进展更新屏幕上的表现形式,同时保持界面美观性和易读性。并且提到由于不同的终端可能有不同的兼容情况,脚本的跨环境行为可能存在细微差别。 适合人群:初学者至中级水平的技术爱好者或者软件开发者,尤其是希望深入掌握Linux环境下命令行工具使用者。 使用场景及目标:① 学习并理解Xshell脚本里涉及的ANSI转义码概念和技术点,从而增强对终端界面元素(如菜单、提示符等)的操作技能;② 掌握通过程序手段构造动态变化的CLI应用程序技巧,比如实时跟踪长时间任务的状态; 阅读建议:本文不仅包含了具体命令的学习,更展示了它们是如何组合起来创造复杂视觉反馈机制的案例研究。对于想进一步探索终端开发领域的程序员而言,这无疑提供了很好的入门指引材料。考虑到各种操作系统上支持度的问题,在测试代码之前应当确认自己的工作平台已经正确配置好。
内容概要:该文档详细探讨了针对达梦数据库的各种性能优化技术和处理方法。具体包括回表问题及其解决措施如覆盖索引和FAST POOL机制;变量窥探、统计数据收集优化方法,例如设置统计桶数量和采样子表数目;视图上拉、JOIN优化、EXISTS与NOT EXISTS子查询重写策略;分区裁剪和多KEY哈希等方面的深入探讨,提供了多个具体的优化技巧,旨在帮助用户有效提升SQL执行性能,并解决了多种可能导致性能下降的关键因素。 适合人群:数据库管理员、运维工程师及具有一定经验的数据开发人员等,尤其是负责使用和维护基于达梦数据库系统的技术团队成员。 使用场景及目标:适用于希望通过改善查询速度来提高系统响应时间的专业人士;需要处理大型数据库或复杂查询的任务;或是正在寻找改进现有数据库架构的方法的机构。它还特别针对那些希望确保最优硬件资源利用率的人群。 其他说明:本文档不仅介绍了理论性的背景知识和技术细节,还包括了大量的实际案例演示和参数调整建议,方便读者理解和实践这些优化方法。此外,针对每种优化策略提供了详细的指导,使得即使是对某些高级特性较为陌生的读者也能顺利掌握关键技能。
54 -营销部经理绩效考核表1
外贸部绩效考核表格
选择使用如下方法,增加系统盘自由空间。最简模式:完成2、4②,即可全面清除电脑垃圾、痕迹。 1、将“桌面”、“我的文档”以及系统盘的其它地方保存的个人文件资料,转移到别的盘保存。 2、双击桌面“计算机”,“系统磁盘”右键--属性--常规/工具:
岗位绩效考核评定表excel表格模板
1、文件内容:apache-commons-vfs-javadoc-2.0-11.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/apache-commons-vfs-javadoc-2.0-11.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装