应无所住,而生其心
排名
1
文章
862
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

consul实现简单的服务集群,负载均衡调用

11756人阅读 2020/6/2 8:42 总访问:5267162 评论:0 收藏:0 手机
分类: 微服务

接上一篇,consul要实现简单的服务集群,其实也很简单,只需要把多个服务使用统一个名字注入即可,然后调用的时候通过服务名获取服务的时候就可以获取到多个,然后通过一种负载均衡算法或者是按一定比例算法调用即可。


在另外一个项目在注入一下consul服务

  1.   "Consul": {
  2.     "ServiceName": "axj",
  3.     "ServiceIP": "localhost",
  4.     "ServicePort": 19341,
  5.     "ServiceHealthCheck": "http://localhost:19341/Health/HealthCheck",
  6.     "ConsulAddress": "http://127.0.0.1:8500"
  7.   }

注意名字保持一致才会注入到同一个服务中,然后ip,端口这些写成当前项目的即可


写一个测试接口

  1. [Route("api/[controller]")]
  2. [ApiController]
  3. public class TestController : ControllerBase
  4. {
  5.     // GET: api/Test
  6.     [HttpGet]
  7.     public IEnumerable<stringGet()
  8.     {
  9.         return new string[] { "value1""value2" };
  10.     }
  11.     // GET: api/Test/5
  12.     [HttpGet("{id}")]
  13.     public string Get(int id)
  14.     {
  15.         return "9341:value";
  16.     }
  17. }

其他的什么健康检查和服务注入扩展方法这些和上篇的一样就不说了,做完这些我们去consul看看我们的服务

点击进去可以看到这个下面有两个服务了,注意看地址是两个不同的地址

然后调用即可,代码和前面测试调用的一样

我们用随机数简单的模拟一下负载均衡

  1. public IActionResult Index()
  2. {
  3.     var url = _configuration.GetSection("Consul")["ConsulAddress"].ToString();
  4.     using (var consulClient = new ConsulClient(a => a.Address = new Uri(url)))
  5.     {
  6.         var services = consulClient.Catalog.Service("axj").Result.Response;
  7.         if (services != null && services.Any())
  8.         {
  9.             // 模拟随机一台进行请求,这里只是测试,可以选择合适的负载均衡框架
  10.             Random r = new Random();
  11.             int index = r.Next(services.Count());
  12.             var service = services.ElementAt(index);
  13.             using (HttpClient client = new HttpClient())
  14.             {
  15.                 var response = client.GetAsync($"http://{service.ServiceAddress}:{service.ServicePort}/api/Test/520").Result;
  16.                 string result = response.Content.ReadAsStringAsync().Result;
  17.                 ViewBag.msg = result;
  18.             }
  19.         }
  20.         else
  21.         {
  22.             ViewBag.msg = "未找到服务";
  23.         }
  24.     }
  25.     return View();
  26. }

效果如下:

两个接口都会被随机的调用


当然服务可以注入很多个:

项目下载地址:https://download.tnblog.net/resource/index/a049e06f93e140afbf5ab9a026b0ad21



欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

.netCore3.1 consul服务集群

前言Consul是一种服务网络解决方案,可跨任何运行时平台以及公共或私有云连接和保护服务简而言之:集群下载地址环境版本:v...

.netCore3.1 Ocelot 与 consul 熔断限流与缓存

目录与前言目录链接:.net core Ocelot 简单网关集群熔断架构整合目录基于上一篇文章展开 Ocelot 与 Consul 进行合并创建一...

consul

Consulagent-dev1、-dev发开模式,数据都在内存2、-server生产模式,数据会持久化

Windows下安装consul与简单介绍

Consul 是一个用来实现分布式系统服务发现与配置的开源工具。它内置了服务注册与发现框架、分布一致性协议实现、健康检查、...

net core服务注入到consul简单调用

下雨又停电,听说下雨天奶茶和代码最配了,找个奶茶店写代码吧 在奶茶店看到有几个小妹妹耍王者好想和她们一起打两把,我...

consul 无法通过ip访问

consul agent -dev 只能本地可以访问要想通过ip可以访问,使用下面的使用即可consul agent -dev -client 0.0.0.0 -ui 指定...

consul 本机可以访问客户端无法访问

是因为默认的启动方式consul agent -dev 只能本机才可以访问如果要外网也可以访问加一个-client 0.0.0.0即可consul agent ...

consulAPI接口

/v1/agent/checks : 返回本地agent注册的所有检查(包括配置文件和HTTP接口) /v1/agent/services : 返回本地agent注册的所...

consul常用API接口地址

agent本地注册 curl http://127.0.0.1:8500/v1/agent/checks 本地代理注册服务的健康状态check curl http://1...

NetCore加consul实现简单服务实例负载

今天,总结一下之前学习的Consul基础(后续如果有时间的话,再加上Ocelot部分):新建一个WebApi项目:模拟服务创建一个Web...

consul删除不需要的服务

调用consul的api接口就行了put请求:">http://consul服务地址/v1/agent/service/deregister/&lt;serviceid&gt;serviceid可...

consul http api与consul-Template

consul的主要接口是RESTful HTTP API,该API可以用来增删查改nodes、services、checks、configguration。所有的endpoints主...

自己实现一个consul的服务管理功能持续完善

因为自带的consul服务管理功能还是比较有限,比如想要移除一个consul中不要的服务,服务集群管理,consul作为配置中心管理等...

.net core3.1使用API网关Ocelot五:配合consul实现动态路由

真正的项目中我们的服务会很多,如果一一地配置到配置文件,将会是一个巨大的工程,这个时候我们就可以让Ocelot与我们的服...

consul外网访问

consul agent -dev 只能本地可以访问要想通过ip可以访问,使用下面的使用即可consul agent -dev -client 0.0.0.0 -ui 指定...