分布式高性能消息处理中心HPMessageCenter

HPMessageCenter

高性能消息分发中心。用户只需写好restful接口,在portal里面配置消息的处理地址,消息消费者就会自动访问相关接口,完成消息任务。(其实HPMessageCenter有两个版本,这次开源的是第二个版本。在第一个版本,消息消费失败的重试依赖数据库进行,造成了很大的性能影响。我一直在思考怎样不依赖数据库来进行消息重试,看过一些实现是通过在内存中计数,这种方式存在很大的风险,系统宕机过后这个失败的消息就只能手动处理。我一直在想,如果每次RabbitMQ重入队的消息能在消息属性中加一个消息发送次数的计数就好了。最后,我利用延时队列和死信队列,通过在MessageHeader中设置RetryNumbers来重新设计了消息消费失败的重试机制。
Git地址https://gitee.com/dugukuangshao/HPMessageCenter

部署说明

 **创建数据库执行Scripts文件夹中的数据库脚本** **配置数据库连接字符串** 打开MessageCenter.Portal\Configuration\Data\Database.config

640?wx_fmt=png&wxfrom=5&wx_lazy=1

在图片中画红线的地方修改链接字符串**配置RabbitMQ连接属性** 打开MessageCenter.Portal\appsettings.json

640?wx_fmt=png&wxfrom=5&wx_lazy=1

在图片中画红线的地方修改RabbitMQ地址和用户名密码部署MessageCenter.Portal到IIS或者Docker中,即可访问

使用说明

 **在首页中配置App和Exchange** 

640?wx_fmt=png

 **在Topic管理页面中配置Topic信息** 

640?wx_fmt=png

ProcessorConfig为消息消费者处理消息的Restful接口**最后在消费者管理页面中添加Sever要运行的Consumer** 

640?wx_fmt=png

此时,通过Publisher/Publish接口发送消息到RabbitMQ,系统中的消费者会自动访问配置的对应消息处理接口处理消息。
### 为什么要开发这样一个消息系统使用此消息系统处理消息,开发者只需调用接口发送消息、写消息处理的接口,不必关心MQ的实现和使用,使开发者更关注业务,提高开发效率。

扩展性

MessageTransit模块是一个高度抽象的模块,开发者可以继承它的接口实现其他MQ(ActiveMQ和RocketMQ等)的对接。该模块还设计了IMonitor和ILogger接口,开发者可以继承IMonitor接口,自定义实现消息处理失败的短信、邮件通知等功能,继承ILogger接口,可以实现MQ断线的通知等,当然默认的RabbitMQ实现支持断线重连。

性能

一个Sever里每个Topic对应一个消费者。一个消费者一次处理一个消息,如果发生消息处理不及时的情况,可以部署多个Sever,并在消费者管理页面添加对应的消息消费者。如果消息数量进一步提高,就需要同步增加消息Restful处理接口的处理能力。比如,一个消息处理接口可以处理每分钟300个并发,一个Sever每分钟只能处理60个消息,此时可以部署5个Sever。消息进一步增加,消息处理接口性能达到瓶颈,增加消息处理接口的处理能力,再增加Sever数即可提高性能。

原文地址:http://www.cnblogs.com/DKSL/p/8489544.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

codeforces Balanced Substring

B. Balanced Substringtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given a string s consisting only of characters 0 and 1. A substring [l, r] of s is a string slsl  1sl  2... sr, and its l…

【动态规划】打砖块

打砖块打砖块打砖块 Description KXT是一个很无聊的小朋友,一天到晚都在打坐… 一天,被他发现了一个比打坐更无聊的事情——打砖块。很多块砖分布在一个mm的矩阵中,他可以消掉以他为左上角顶点的一个nn的矩阵里的所有砖块。 喜欢偷懒的他…

jzoj2292-PPMM【模拟,堆】

正题 题目链接:https://jzoj.net/senior/#contest/show/3008/0 题目大意 一个队列要求支持 队尾压入一个数队首弹出一个数队列里所有数取反求最大值 解题思路 开444个堆,存正数最大值最小值,负数最大值最小值,取反时打标记即可。 codecod…

8、play框架中持久层操作

1、使用jdbc连接数据库 1、1 简介 JDBC是一个阻塞操作,它将导致线程等待,直接使用JDBC进行查询将导致性能降低 1、2 配置数据源 play提供了一个用于管理JDBC连接池的插件,可以根据需要配置任意多个数据库,想要使用此插件&…

DBCHM-最简单、实用的数据库表列批注维护工具

DBCHM支持SqlServer/MySql/Oracle/PostgreSQL/Sqlite等数据库的表列批注维护管理。DBCHM有以下几个功能表,列的批注可以编辑保存到数据库。表,列的批注支持通过pdm文件导入的方式进行更新到数据库。基于数据库中的表列结构(列ID/列名/数据类型/长度/精度…

图书管理员【2017年普及组第二题】

图书管理员图书管理员图书管理员 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。 每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图书编码恰好以读者的需 求码结尾&…

jzoj4012-Distinct Paths【搜索】

正题 题目链接:https://jzoj.net/senior/#contest/show/3008/1 题目大意 n∗mn*mn∗m的格子,kkk种颜色涂色,求有多少种方案使得没有任意一条只往右和下的路径经过相同颜色。 解题思路 显然如果nm−1>knm-1>knm−1>k就无解,所以nm−…

浅谈Log4net在项目中如何记录日志

一 引入背景在软件开发周期中,无论是开发中,或是测试中,或是上线后,选择合适的工具监控程序的运行状态至关重要,只有如此,才能更好地排查程序问题和检测程序性能问题等。本篇文章主要与大家分享&#xf…

9、play中缓存的使用

1、简介 对于存储在缓存中的任何数据,都需要放置一个再生策略,以防数据丢失。这一理念是play基本原则之一。对于进程内缓存,Caffeine 通常是最佳选择。如果需要分布式缓存,play提供了Memcached和Redis的第三方插件。 2、添加缓存…

ISBN号码【模拟】

ISBN号码ISBN号码ISBN号码 题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后…

jzoj4010-Philips and Calculator【搜索,dp】

正题 题目链接:https://jzoj.net/senior/#contest/show/3008/2 题目大意 两个数(a,b)(a,b)(a,b),两个操作 (a,b)−>(a,b1)(a,b)->(a,b1)(a,b)−>(a,b1)(a,b)−>(a∗b,b)(a,b)->(a*b,b)(a,b)−>(a∗b,b) 求ppp步以内aaa能到达[l,r][l,r][l,r]之…

10、使用ws调用Rest api

目录 1、简介 2、添加WS配置 3、发送请求 4、处理请求 5、常用模式和用例 6、自定义BodyReadables和BodyWritables 6、独立WS 7、访问AsyncHttpClient 8、配置WS 1、简介 有时我们想从一个play应用程序中调用其他HTTP服务。Play提供了WS库来进行异步HTTP方法调用。 …

笨小猴

笨小猴 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多…

codeforces Cable Connection

我的思路很暴力 直接枚举斜率[-100000,0]之间,然后设置一个非常远的直线,对所有点扫一遍,确定一个离这条直线最近的点P。 用点P和斜率k来创建cable,并用cable的距离来relax答案。 现在问题在于,怎么来枚举k&#xf…

拥抱开源,Office 365 开发迎来新时代

前言作为全球最大的开放源代码托管平台,Github在上周迎来了它的十岁生日。自从2008年正式上线以来,Github上面汇聚了数以千万计的开发人员和各种项目,它几乎成为了开源的代名词和风向标,各大软件巨头都纷纷支持,在广大…

jzoj4015-数列【循环节,数论】

正题 题目链接:https://jzoj.net/senior/#contest/show/3011/0 题目大意 给出n,m,a,b,c,x0n,m,a,b,c,x_0n,m,a,b,c,x0​ xiaxi−12bxi−1cx_iax_{i-1}^2bx_{i-1}cxi​axi−12​bxi−1​c 求xn%mx_n\%mxn​%m 解题思路 第一段n≤1e6n\leq 1e6n≤1e6直接O(n)O(n)O(n)暴力做 第…

11、OAuth和OpenID服务

1、OAuth 1、1 简介 OAuth是发布受保护数据并与之交互的简单方法。对于人们来说,这也是一种更安全的访问方式。例如,它可以用来访问你的用户在Twitter上的数据。Play仅提供对OAuth 1.0的支持。 1、2 基本工作原理 在build.sbt中添加配置:…

求凸函数极值 CSF迭代法(雾)

简介 本算法用来求解凸函数极值点的问题,由我在写ACM习题时想到,在网上并未找到这样的算法,拿出来给大家分享一下,如果网上没有的话,我决定给它起名叫做 CSF迭代法,如果这个算法早已经存在,那就…

排座椅【贪心】

排座椅 题目描述 上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。同学们在教室中坐…

jzoj4016-圈地为王【状压,bfs,几何】

正题 题目链接:https://jzoj.net/senior/#contest/show/3011/1 题目大意 n∗mn*mn∗m的格子,格子之间有道路,对于每个iii就走过最短的回路使得 圈住iii个有价值的格子没有圈住任何一个坏格子 解题思路 判断一个点是否在一个多边形内,我们可…