基本情况介绍:
agent:负载容器的生命周期管理,和容器的健康检查,在容器进程down和start的时候给master发通知
master:接收到agent的消息放到一个队列里面,一个线程循环从队列中获取appid,将最新的应用的实例列表发给router(由于很多种业务场景都会触发router更新,且要保证先后顺序,所以用了一个队列,且把放的和取的分开)
router:router接收到master过来的消息,更新应用的实例列表,以保证请求都转发到可用的实例上。
问题来了:
有的应用处理总超时,导致健康检查频繁的失败和成功,每一次变化都会通知master,master都会通知router,状态变化过于频繁会导致router处理失败。
解决方法一:
队列里本来就放了appid和addtime,再加一个map,key=appid,value=最后一次放入队列的time
每次从队列取出appid后比较addtime和map里面的appid的time,< 不处理,>= 通知router,以此减少通知的频率,减轻router的压力。问题:如果容器的状态变化很频繁,从队列里面取到的时间永远小于map中的时间,永远不会通知。
解决方法二:
将队列改为优先级队列PriorityQueue,这样所有的appid的消息在一起,从队列里面取出来的下一次的appid和上一次的不一样,通知rouer,一样pass。缺点:不能保证先变化的先通知。
解决方法三:
使用queue和set,每次放队列的时候,先判断set是否有appid,有pass,没有set和queue同时添加。这样可以把重复的的在放的时候就过滤掉。为了保证处理过快,过滤重复的效果不佳,每处理队列里面的一个元素,sleep1秒。这个sleep1s对于业务是可以接受的。这个方案对于目前的并发量来说,应该是没有问题的。一定要注意在放set和queue,删set和queue的时候加锁,以防止高并发的问题
综合考虑,我们采用了方案三。
分享到:
相关推荐
内容是一个javaspring结构的模块,设计了处理高并发解决方案,消息队列处理业务逻辑的代码设计,注意:1 只是一个模块,不是一个可运行项目,2 需要项目结构是java spring,3 需要自己选择并搭建所使用的消息队列。
行业分类-设备装置-消息队列的实现方法和系统、消息队列处理系统
第2章 解耦案例:队列处理订单系统和配送系统 讲解消息队列用于解耦的案例,使用mysql的一个表,做为队列存储,来实现成中间件来解耦订单系统和配送系统。使用订单系统实时写入,并用定时任务启动配送系统的处理程序...
“消息队列”是 Microsoft 的消息处理技术,它在任何安装了 Microsoft Windows 的计算机组合中,为任何应用程序提供消息处理和消息队列功能,无论这些计算机是否在同一个网络上或者是否同时联机。 “消息队列网络”...
行业文档-设计装置-消息队列大数据去重处理方法
用三种方法实现从MQ队列接收消息,java代码
本文详细讲述了windows消息和消息队列的原理与应用方法。分享给大家供大家参考。具体分析如下: 与基于MS – DOS的应用程序不同,Windows的应用程序是事件(消息)驱动的。它们不会显式地调用函数(如C运行时库调用)...
伴随着互联网的高速发展,互联网每日都会产生海量的数据,需要对这些海量数据进行大数据的实时处理,一个性能优良的分布式消息队列,会对系统的数据业务处理效率有极大的推进作用,那么使用什么样的消息队列传输这些海量...
行业分类-设备装置-多接口发动机测控系统数据队列处理方法.zip
本文总结了在处理分布式计算中数据一致性问题遵循原则,分析实现微服务的幂等性设计重要性,提出了一种采用事务型消息队列解决分布式微服务典型应用场景中数据一致性问题的方法,并给出RocketMQ实现方式及原理,实验...
方法将系统服务技术与消息队列技术相结合应用于生产现场数据采集系统,使用消息队列技术在客户端和服务器间传递数据,通过基于系统服务技术的服务器端数据处理程序从消息队列中取出数据 。结果分析两种技术在数据采集...
同时网关采用json消息与平台进行交互,支持jms消息队列以及redis消息队列,默认使用ActiveMQ,能够无缝接入各种不同异构系统。 2、上行消息处理应用采用spring框架,采用基于事件驱动的设计模式处理上行消息,支持...
在普通的任务脚本中写入push_queue队列要发送消息的目标,并为目标设置一个要推送的内容,永不过期 RedisPushQueue中brpoplpush处理,处理后的值放到temp_queue,主要防止程序崩溃造成推送失败 ...
消息队列处理后台任务带来的问题 项目中经常会有后台运行任务的需求,比如发送邮件时,因为要连接邮件服务器,往往需要5-10秒甚至更长时间,如果能先给用户一个成功的提示信息,然后在后台慢慢处理发送邮件的操作,...
阿尔法队列一个具有离线存储、检索和异步处理的消息队列,灵感来自并派生自为什么是另一个图书馆? Job Queue 是一个非常好的实现,但它更适合需要即发即忘方法向服务器发送消息的应用程序。 开箱即用的作业队列不...
对于大并发的问题,可以将耗时的任务或者不能同时大量并行的任务封装起来传输到消息队列中,由处理程序不断从消息队列中提取消息并进行处理,这样通过消息队列的缓冲可以使得在大并发情况下不再阻塞,如果性能不够用...
利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的防故障方法。
但是没有单独将消息服务提取出来.而是每个model之间相互进行消息发布与消费. 这样解耦性比较差.且仍需要model与model之间进行服务的调用..还是多多少少会影响服务器的性能. 所以考虑将消息服务提取出来.单独建一个...
主要介绍了C#多线程处理多个队列数据的方法,涉及C#线程与队列的相关操作技巧,需要的朋友可以参考下
先说一下笔者这里的测试环境:Ubuntu14.04 ...处理方法描述:发送端在发送信息前,产生一个接收消息的临时队列,该队列用来接收返回的结果。其实在这里接收端、发送端的概念已经比较模糊了,因为发送端也同样要接收消息