浅谈surging服务引擎中的rabbitmq组件和容器化部署

1、前言

上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎,而这篇将介绍浅谈surging服务引擎中的rabbitmq组件和容器化部署

surging源码下载

2、Sidecar模式

  比如现在比较火的Service Mesh, 谈到Service Mesh,就不得不了解下Sidecar模式,Sidecar设计模式被越来越多的关注和采用,此模式之所以称作Sidecar,是因为它类似于三轮摩托车上的挎斗。 在此模式中,挎斗附加到应用程序中,为应用程序提供支持性功能。挎斗与应用程序具有相同的生命周期:与应用程序一起创建,一起停用。 挎斗模式有时也称为搭档模式,这是一种分解模式。而surging 采用了Sidecar模式用来附加组件,而使用Sidecar模式有以下功能

  •     共享存储空间

      引擎组件部署到共享的文件目录里,服务引擎从共享的文件目录扫描引擎组件文件。

  •    共享组件和业务的配置文件

        针对于组件的配置文件部署到共享的文件目录里,服务引擎从共享的文件目录加载文件。

  •   独立的业务服务

        针对于业务可以把依赖的组件打包部署到共享的文件目录里,服务引擎从共享的文件目录扫描加载,从而部署成独立的业务服务

  •    内置多种协议

        针对于独立部署的业务服务,内置了多种协议,提供给服务和外部程序进行调用

      模式特点

  • 隔离:让组件都能够关注核心问题。比如eventbus、Logger、 netty 在实现功能的同时无需关注其它组件的实现而发生的冲突;

  • 单一责任原则:每个组件都应该职责分开,而根据这一原则,职责应该是对应一个类、模块或者接口,从而能够独立进行处理。

  • 内聚性/可重用性:针对组件的特性,方法可以进行重用,从而满足组件可持续扩展。

3、基于Event Bus 的Rabbitmq组件

       surging服务引擎扩展了基于eventbus 的rabbitmq ,组件可以选择绑定 Normal,Retry(Dead letter),Fail ,如下图所示。

       而针对于该组件有哪些应用场景呢?

  • 商品秒杀和抢购

        抢购/秒杀是如今很常见的一个应用场景,在高并发的流量访问下可以将用户放入到抢购队列中,购买成功则销毁消息。

  • 最终数据的一致性

       在大型业务中,系统一般由多个独立的服务组成,在分布式调用时候把消息放入到rabbitmq 队列中,再通过消息的幂等性来解决数据的最终一致性

  •  订单失效处理

       在购买商品/服务生成订单业务中,会设定支付时间,如果一直未支付,会直接关闭订单,而这个场景可以通过死信队列的来解决

 640?wx_fmt=png

示例代码

可以通过继承BaseIntegrationEventHandler或者IIntegrationEventHandler,再通过QueueConsumer特性进行标识,具体代码如下

640?wx_fmt=png

 可以通过以下选项去更改配置

640?wx_fmt=png

生成绑定的队列如下图

640?wx_fmt=png

通过rabbitmq管理工具,可以通过properties来查看重试次数count 等一些信息,如下图所示

640?wx_fmt=png

 

4、如何部署

surging 服务引擎构建镜像部署在docker中,可以按照业务需求自定义化引擎,也可以从 docker hub中pull镜像,可以按照如下流程从docker hub 拉取部署镜像

如何pull镜像

可以通过命令:

docker pull serviceengine/surging 

可以指定具体的tag来拉取,比如需要拉取v0.9.0.2,执行以下命令

docker pull serviceengine/surging:v0.9.0.2 

如何配置

1.镜像可以用环境变量设置相关参数,而通过以下的默认配置文件知晓如何通过环境变量配置参数,配置的规则:${环境变量名}|默认值

640?wx_fmt=png

2.可以通过设置环境变量surgingpath和cachepath来指定自定义文件配置,比如,挂载/home/fanly 目录,通过以下命令参数 -v /home/fanly:/home/fanly 来设定,再通过设置以下命令参数用来设定自定义文件配置

--env surgingpath=/home/fanly/configs/surgingSettings.json--env cachepath=/home/fanly/configs/cacheSettings.json 

如何启动内置引擎组件

引擎可以加载多个同一类型的引擎组件,可以通过以下配置启用哪一种引擎组件,如果是自定义的服务引擎,不需要配置以下配置,只需要按照需求引用组件

640?wx_fmt=png

如何启动引擎

比如 pull 的镜像是serviceengine/surging:v0.9.0.2 ,可以按照以下命令进行启动

docker run --name surging --env surgingpath=/home/fanly/configs/surgingSettings.json  --env cachepath=/home/fanly/configs/cacheSettings.json -v /home/fanly:/home/fanly  serviceengine/surging:v0.9.0.2  

 7.总结

如有问题请到这里提问 ,可以加入surging互相交流QQ群:542283494,引擎组件扩展沟通群:615562965

原文地址: https://www.cnblogs.com/fanliang11/p/9543267.html


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

640?wx_fmt=jpeg

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

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

相关文章

csp-j/s总结

文章目录csp-jcsp-s总结csp-j T1傻逼题(我是傻逼),手残把&打成整除了(大样例还对了gg) T2乱推,然后打了个O(n)O(n)O(n),却WA了15分? T3看了看,修改不会相互影响?那不…

.net core实践系列之短信服务-架构设计

前言上篇《.net core实践系列之短信服务-为什么选择.net core(开篇)》简单的介绍了(水了一篇).net core。这次针对短信服务的架构设计和技术栈的简析。源码地址:https://github.com/SkyChenSky/Sikiro.SMS为什么需要架…

CAP 2.3版本发布,支持 MongoDB

前言经过2个月的调整及测试,CAP 2.3 版本终于发布了,这个版本最大的特性就是对于 MongoDB 的支持,感谢博客园团队的keke同学对于 MongoDB 支持所提供的 PR,相信随着博客园的使用,CAP 会越来越多的帮助到更多的人。CAP …

.NETCore 实现容器化Docker与私有镜像仓库管理

一、Docker介绍Docker是用Go语言编写基于Linux操作系统的一些特性开发的,其提供了操作系统级别的抽象,是一种容器管理技术,它隔离了应用程序对基础架构(操作系统等)的依赖。相较于虚拟机而言,Docker共享的是…

记一次.net core 集成vue 实践

简介以前我们总是喜欢用服务端渲染前端(虽然也有htmlajax这种做法),后来node诞生了,前端工具链(不如说生态)诞生了,大家都开始了前端的重构之路,本文将以一简单案例介绍下我们是如何…

AspNetCore中使用Ocelot之 IdentityServer4

前言:Ocelot网关是基于AspNetCore开发的可扩展的高性能的企业级Api网关,目前已经基于2.0 升级版本升级,在使用AspNetCore 开发的时候可以使用2.0版本了,开源项目Ocelot 张大队长是主力的参与人员,以前提起张大队前面都…

Nginx主配置文件详解【笔记】

1 Nginx配置文件目录结构 最近使用Nginx做负载均衡,顺便整理Nginx配置文件笔记如下所述,本文主要梳理主配置文件各属性的作用。使用yum安装好Nginx后,可以在默认路径(/etc/nginx)看到如下配置文件。 /etc/nginx/ ├─…

微服务介绍及Asp.net Core实战项目系列之微服务介绍

0、目录整体架构目录:ASP.NET Core分布式项目实战-目录一、微服务选型在做微服务架构的技术选型的时候,以“无侵入”和“社区活跃”为主要的考量点,将来升级为原子服务架构、量子服务架构的时候、甚至恢复成单体架构的时候,代价最…

【矩阵乘法】生成树计数(luogu 2109/NOI 2007)

生成树计数 luogu 2109 题目大意 有n个排成一列的点,把距离不超过k的点之间连边,问这个图的生成树个数 输入样例 3 5输出样例 75样例说明 样例对应的图如下: 数据范围 解题思路 因为n十分大,不能直接2^m暴力枚举&#x…

你需要知道的这几种 asp.net core 修改默认端口的方式

一般情况下,aspnetcore发布后的默认端口是5000,这个大家都知道,而且默认骨架代码中没有看到任何让你输入的ip地址和端口号,但作为程序员的我们,不希望被框架所管制,那如何实现默认端口的修改呢?…

牛客网【每日一题】5月18日 「土」秘法地震

链接: 文章目录题目描述题解:代码:时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld题目描述 帕秋莉掌握了一种土属性魔法 这种魔法可以在一片kk大小…

AspNetCore 中使用 InentityServer4(2)

基于上一篇文章 实现对IdnetityServer4 服务的使用1:添加接口解决方案,并且使接口受认证服务的保护:首先在解决方案中添加Api项目如下图所示:在API项目中添加Nuget 引用 如下图所示:Install-Package IdentityServer4.A…

Visual Studio 2017 15.8概览

Microsoft正式发布VS2017的第八次更新,即15.8。15.8提供了今年夏天预览的大量新特性,包括Code Cleanup、IDE支持多重查补(Multiple Caret)、Visual Studio Code和ReSharper快捷键设置等。各类开发人员均可受益于这些已供使用的新特…

利用.NET Core类库System.Reflection.DispatchProxy实现简易Aop

Aop即是面向切面编程,众多Aop框架里Castle是最为人所知的,另外还有死去的Spring.NET,当然,.NET Core社区新秀AspectCore在性能与功能上都非常优秀,已经逐渐被社区推崇和有越来越多的人使用。感谢柠檬同学的礼物&#x…

当我们谈高性能时,我们谈些什么?(送书活动)

网站越快,用户的黏性就越高;网站越快,用户忠诚度更高;网站越快,用户转化率越高。简言之,速度是关键。——《Web 性能权威指南》显然,高性能意味着“快”。但对快的定义,在不同的系统…

Asp.net Core 2.1新功能Generic Host(通用主机)深度学习

什么是Generic Host ?这是在Asp.Net Core 2.1加入了一种新的Host,现在2.1版本的Asp.Net Core中,有了两种可用的Host。Web Host –适用于托管Web程序的Host,就是我们所熟悉的在Asp.Net Core应用程序的Mai函数中用CreateWebHostBuilder创建出来的常用的We…

520 钻石争霸赛 题解

说好的钻石难度,结果本人菜的一地。。只有88分。。。。 文章目录7-1 考试周7-2 真的恭喜你7-3 平均成绩7-4 古风AB难度开始上升7-5 猜近似数字7-6 随机输一次7-7 阶乘的非零尾数7-8 三足鼎立前四题十分钟AC后两题二十分钟自闭第五题玄学卡点不知为何7-1 考试周 模拟…

.NET Core 跨平台物联网框架 ServerSuperIO.Core,一套设备驱动通吃嵌入式、上位机、云服务...

一、概述我们的大数据平台(云)平台的数据接收服务基于ServerSuperIO开发,因为集成的功能比较多,无法实现跨平台,现在跑在Windows下。但是云端体系化、标准化建设,跨平台是必走的技术路线。在ServerSuperIO基…

asp.net core添加全局异常处理及log4net、Nlog应用

一、介绍此篇文章将会介绍项目的全局异常收集以及采用log4net或者NLog记录。众所周知,一旦自己的项目报错,如果没有进行处理都是显示不友好的,有得甚至直接爆出错误页面,看的也是很奇怪。为了避免出现这样的错误以及在错误出现的时…

牛客网 【每日一题】5月20日题目 简单瞎搞题

比赛链接 文章目录题目描述题解:代码:题目描述 输入描述: 第一行一个数 n。 然后 n 行,每行两个数表示 li,ri。 输出描述: 输出一行一个数表示答案。 示例1 输入 5 1 2 2 3 3 4 4 5 5 6输出 26备注: 1 ≤ n , li , ri ≤ 100 题解&#xf…