JMS微服务开发示例(九)相同的微服务,按用户所在城市来分配微服务器
虽然,默认情况下,多个相同的微服务,网关是自动根据微服务的压力情况,把用户请求分配到压力较轻的微服务器上。
但是,在某些业务情景下,我们可能希望人为去控制微服务的请求分配。
举个例子,我在北京、上海、广州等城市,都部署了一个相同的微服务,我希望北京的用户访问北京的微服务器,上海的访问上海的微服务器。
要实现这个功能,我们需要定义一套脚本,来动态给用户匹配服务器。
北京的微服务,在注册时告诉网关,需要使用/data/checkCode_beijing.cs里的代码,来判断是否让当前用户访问
var microServiceHost = new MicroServiceHost(services);
microServiceHost.ClientCheckCodeFile = "/data/checkCode_beijing.cs"; //告诉网关,要以 /data/checkCode_beijing.cs里面的代码,来决定客户端是否可以请求这个服务器
microServiceHost.Register<Controllers.UserInfoController>("UserInfoService");
microServiceHost.ServiceProviderBuilded += Msp_ServiceProviderBuilded;
microServiceHost.Build(port, HostEnvironment.GatewayAddresses)
.Run();
在网关服务器的/data 目录下,放一个checkCode_beijing.cs文件,文件内容如下:
if( headers.TryGetValue("City" , out string city))
{
if( city == "Beijing" )
return true;
}
return false;
这段脚本比较简单,意思就是当用户所在城市等于Beijing,允许访问这台微服务器。
下面是应用层获取微服务实例的代码:
using (var client = new RemoteClient())
{
//把用户所在城市放在请求头
client.SetHeader("City",city);
//获取微服务实例
var service = client.GetMicroService<MicroServices.UserInfoService>();
//如果city等于Beijing,那么获取到的service就是北京那个微服务器的实例
//调用微服务
var ret = service.GetUserInfo();
}
JMS微服务开发示例(九)相同的微服务,按用户所在城市来分配微服务器的更多相关文章
- Agile.Net 组件式开发平台 - 服务开发示例
在上一篇文章中已经讲解了组件的开发,这篇文章讲解平台服务开发. Agile.Net开发管理平台项目,已经托管在开源中国码云平台(http://git.oschina.net) 登陆码云平台进入项目主页 ...
- JMS微服务开发示例(一)Hello world
网关部署 1.在网关服务器上,安装.net core 3.1运行环境: 2.到 https://www.cnblogs.com/IWings/p/13354541.html 下载Gateway.zip ...
- 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发
<ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...
- 基于 abp vNext 微服务开发的敏捷应用构建平台 - 文章目录
系列文章: <基于 abp vNext 微服务开发的敏捷应用构建平台 - 设计构想> [点击查看] <基于 abp vNext 微服务开发的敏捷应用构建平台 - 文章目录> [ ...
- 活动识别API服务开发
活动识别API服务开发 要使用华为活动识别服务API,需要确保设备已经下载并安装了HMS Core(APK),并将Location Kit的SDK集成到项目中. 指定应用权限 在Android Q以下 ...
- 地理围栏API服务开发
地理围栏API服务开发 要使用华为地理围栏服务API,需要确保设备已经下载并安装了HMS Core(APK),并将Location Kit的SDK集成到项目中. 指定应用权限 如果需要使用地理围栏服务 ...
- 第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同). 公众号可通过本接口来根据O ...
- 微软微服务eShopOnContainers示例之EventBusRabbitMq解析与实践
eShopOnContainers eShopOnContainers是微软官方的微服务架构示例,GitHub地址https://github.com/dotnet-architecture/eSho ...
- 【开源】.net微服务开发引擎Anno开源啦
1.Anno是什么? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可监控.依赖第三方框架少.底层通讯RPC(Remote Procedure Call)采用稳定可靠经过无数成功项 ...
- 【开源】.net微服务开发引擎Anno 让复杂的事简单点- 日志、链路追踪一目了然 (上)
1.Anno简介? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可视化监控.依赖第三方框架少.详情请查看<[开源].net微服务开发引擎Anno开源啦> 本章主题:. ...
随机推荐
- Python——第五章:shutil模块
复制文件 把dir1的文件a.txt 移动到dir2内 import shutil shutil.move("dir1/a.txt", "dir2") 复制两个 ...
- ESXi6.7物理机安装之网卡驱动封装Realtek PCIe GBE Family Controller =瑞昱r8168网卡驱动
https://blog.whsir.com/post-3423.html "我这里先提供一个ESXI6.5封装好的r8168网卡驱动ESXI6.5u2.iso,如果你的网卡也是这个,可以直 ...
- RSA 加密算法
RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用.RSA是由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Ad ...
- Mybatis 源码2——SqlSession,执行器和一级缓存
一丶 SqlSessionFactoryBuilder,SqlSessionFactory,sqlSession mybatis 获取sqlSession是通过SqlSessionFactory获取的 ...
- JSON字符串中获取一个特定字段的值
第一种 import com.google.gson.JsonObject; import com.google.gson.JsonParser; String json="{\" ...
- LiteOS内核源码分析:静态内存Static Memory
摘要:本文带领大家一起剖析了LiteOS静态内存模块的源代码,包含静态内存的结构体.静态内存池初始化.静态内存申请.释放.清除内容等. 内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要 ...
- 带你探索CPU调度的奥秘
摘要:本文将会从最基础的调度算法说起,逐个分析各种主流调度算法的原理,带大家一起探索CPU调度的奥秘. 本文分享自华为云社区<探索CPU的调度原理>,作者:元闰子. 前言 软件工程师们总习 ...
- allowedOrigins cannot contain the special value "*"
Spring Boot的版本高于 2.4以后 ,原来的配置已经不适合目前的版本 将代码中的allowedOrigins改为allowedOriginPatterns @Configuration pu ...
- JQuery 弹出模态窗口
index.html <!DOCTYPE html> <html> <head> <!-- Contact Form CSS files --> < ...
- Sublime Text 16进制显示
大文件推荐使用 UltraEdit 工具 Sublime Text 16进制显示(可以直接显示不同数据类型转换后的结果,不用在线工具,转二进制了) 安装 HexViewer 插件 1. Ctrl + ...