首先安装consul环境,参照之前的文章:<服务注册发现consul之一:consul介绍及安装>中的第一节介绍. Spring Cloud使用Consul的服务与发现 1.导入依赖pring-cloud-starter-consul-discovery. 2.在其入口文件Application加入注解@EnableDiscoveryClient,开启服务发现(在consul中注册自己). 3.配置中标明consul信息及自己注册到注册中心的SERVICES和instance-id sprin…
Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发.它具有很多优点.包括:基于 raft 协议,比较简洁: 支持健康检查, 同时支持 HTTP 和 DNS 协议 支持跨数据中心的 WAN(广域网) 集群 提供图形界面 跨平台,支持 Linux.Mac.Windows. consul是使用go语言开发的服务发现.配置管理中心服务.内置了服务注册与发现框 架.分布一致性协议实现.健康检查.Key/Value存储.多数据中心方案,不再需要依赖其他工具…
一.kong 1.使用kong来做服务网关,目前kong使用的是0.13版本现在地址:https://docs.konghq.com/install,kong的社区版没有dashboard,可以使用kong-dashboard,项目地址:https://github.com/PGBI/kong-dashboard.方便使用和管理.目前kong还不支持直接代理grpc,nginx-1.13.10以后版本开始支持代理grpc.kong0.13使用的是1.13.6,以后会支持grpc代理. 2.简单安…
一.基于key/value实现 我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问.这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如:基于Redis的实现.基于Zookeeper的实现.本文将介绍一种基于Consul 的Key/Value存储来实现分布式锁以及信号量的方法. 分布式锁实现 基于Consul的分布式锁主要利用Key/Value存储API中的acquire和release操作来实现.acquire和release操作是…
spring cloud微服务不定期会出现网络请求失败的错误.于是看了下后台日志,发现有几个请求会报如下的异常: Caused by: feign.RetryableException: Connection refused (Connection refused) executing POST http://oauth/oauth/token****** at feign.FeignException.errorExecuting(FeignException.java:) at feign.…
这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,keepalive 连接心跳 可配支持 多数据中心 支持 — — — kv存储服务 支持 支持 支持 — 一致性 raft paxos raft — cap cp cp cp ap 使用接口(多语言能力) 支持http和dns 客户端 http/grpc http(sidecar) watch支持 全量/…
ASP.Net Core的基本配置 .在VS中调试的时候有很多修改Web应用运行端口的方法.但是在开发.调试微服务应用的时候可能需要同时在不同端口上开启多个服务器的实例,因此下面主要看看如何通过命令行指定Web应用的端口(默认5000) 可以通过设置临时环境变量ASPNETCORE URLS来改变默认的端口.域名,也就是执行 dotnet xxx.dll之前执行set ASPNETCORE_URLS=http://127.0.0.1:5001来设置环境变量. 如果需要在程序中读取端口.域名(后续…
前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这种方式的缺点.那么下面讲如何在spring cloud+dotnet core的应用下进行服务调用. 代码实现 假设一种场景,有一个订单服务,有一个产品服务,其中产品服务是由两个服务节点组成一个集群.需求是订单服务访问产品服务的一个API接口.根据上一章文章的内容创建3个应用程序ServiceOne…
ASP.NET Core 微服务初探[1]:服务发现之Consul   在传统单体架构中,由于应用动态性不强,不会频繁的更新和发布,也不会进行自动伸缩,我们通常将所有的服务地址都直接写在项目的配置文件中,发生变化时,手动改一下配置文件,也不会觉得有什么问题.但是在微服务模式下,服务会更细的拆分解耦,微服务会被频繁的更新和发布,根据负载情况进行动态伸缩,以及受资源调度影响而从一台服务器迁移到另一台服务器等等.总而言之,在微服务架构中,微服务实例的网络位置变化是一种常态,服务发现也就成了微服务中的一…
前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这种方式的缺点.那么下面讲如何在spring cloud+dotnet core的应用下进行服务调用. 代码实现 假设一种场景,有一个订单服务,有一个产品服务,其中产品服务是由两个服务节点组成一个集群.需求是订单服务访问产品服务的一个API接口.根据上一章文章的内容创建3个应用程序ServiceOne…