{"id":13753415,"url":"https://github.com/FollowmeTech/fm.consulinterop","last_synced_at":"2025-05-09T21:34:46.929Z","repository":{"id":87226501,"uuid":"132720334","full_name":"FollowmeTech/fm.consulinterop","owner":"FollowmeTech","description":"a lib for build micro-service","archived":false,"fork":false,"pushed_at":"2018-12-25T08:04:51.000Z","size":212,"stargazers_count":32,"open_issues_count":2,"forks_count":6,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-08-03T09:05:21.697Z","etag":null,"topics":["consul","consul-kv","docker","dotnet","dotnet-core","grpc","microservice"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FollowmeTech.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-09T07:42:09.000Z","updated_at":"2024-08-03T09:05:23.980Z","dependencies_parsed_at":"2023-03-12T22:15:39.468Z","dependency_job_id":null,"html_url":"https://github.com/FollowmeTech/fm.consulinterop","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FollowmeTech%2Ffm.consulinterop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FollowmeTech%2Ffm.consulinterop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FollowmeTech%2Ffm.consulinterop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FollowmeTech%2Ffm.consulinterop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FollowmeTech","download_url":"https://codeload.github.com/FollowmeTech/fm.consulinterop/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224884615,"owners_count":17386121,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["consul","consul-kv","docker","dotnet","dotnet-core","grpc","microservice"],"created_at":"2024-08-03T09:01:21.736Z","updated_at":"2024-11-16T06:30:20.066Z","avatar_url":"https://github.com/FollowmeTech.png","language":"C#","funding_links":[],"categories":["C\\#","grpc"],"sub_categories":[],"readme":"##  FM.ConsulInterop -a lib for simple build micro service \n\n## 解决了什么问题\n- [解决了什么问题,怎么解决](./docs/intro.md)\n\n## 依赖的技术栈\n-  [dotnet standard 2.0]()\n-  [gRPC - An RPC library and framework](https://github.com/grpc/grpc)\n-  [consul-Service Discovery and Configuration Made Easy](https://consul.io)\n\n## 组件交互图\n\n![](./docs/art.png)\n\n\n## 功能\n-  简化grpc-srv注册到consul的交互方式 (简单的配置文件/一个扩展方法)\n-  简化grpc-client 消费grpc-srv的交互方式 (简单的配置文件/proxy模式)\n-  客户端定时自动发现srv,并自动负载请求到srv \n-  客户端中间件(认证/log/timeout..)\n\n## let's getting start\n\n#### 如何启动:\n\n[simples代码](./samples/)\n\n1. 下载consul, 启动consul命令 (consul agent -dev)\n2. 修改samples/下面的[appsettings](./samples/SharedProject/appsetting.json)配置文件设置相关的consul地址,和srv-监听地址\n3. 启动srv ,启动client\n\n#####  客户端和服务端的配置文件详解\n\n\n\n```json\n{\n  \"consul\": {\n    \"service\": {  ##给srv用的节点\n      \"ServiceName\": \"followme.srv.demo.x\",  ##注册到consul中的srv-name\n      \"ConsulAddress\": \"http://localhost:8500\", ##consul服务地址\n      \"ServiceAddress\": \"192.168.*.*:0\",  ## 服务启动的IP/Port ,可以填写网段信息,端口为0表示auto-choose\n      \"ConsulIntegration\": \"true\", ##是否需要把服务信息注册到consul中\n      \"ConsulTags\": \"v-1.0.0.1\", ##tag ,和go-micro通讯必须要注册tag值\n      \"TCPInterval\": 10  ##consul health check ,这里使用的是TTL模式\n    },\n    \"remotes\": {\n      \"demo\": {  #####这里是给客户端使用的节点\n        \"name\": \"demo.x\",  ####准备遗弃的配置!\n        \"ServiceName\": \"followme.srv.demo.x\", ####客户端需要消费的服务名(通过这个名字来找到相应的服务提供的地址)\n        \"FreshInterval\": 10000,  #### 客户端需要定时的刷新服务列表,时间毫秒\n        \"ConsulAddress\": \"http://localhost:8500\", ### consul的地址\n        \"ConsulIntegration\": \"true\", ### 客户端是否需要从consul获取服务地址\n        \"ServiceAddress\": \"\" ### 当ConsulIntegration=false的时候, 这里的地址可以配置服务的具体ip:port方式\n      }\n    }\n\t}\n}\n```\n#### srv启动代码解析\n\n```c#\nvar srvConfig = conf. GetSection(\"consul\").GetSection(\"service\").\nGet\u003cConsulLocalServiceConfig\u003e();\nnew Server\n{\n     Services = { FM.Demo.HelloSrv.BindService(new HelloSrvImp()) },\n}.StartAndRegisterService(srvConfig).Wait();\n\n//获取配置文件中配置的service节点\n//通过使用扩展方法[StartAndRegisterService]来启动grpc-服务\n//服务启动之后,查看consulUI中的相关界面信息,发现服务已经注册成功!\n```\n![](./docs/srv-consul.png)\n\n\n\n#### client消费srv代码解析\n```c#\n\n//通过配置文件获取client需要消费的那个srv组(因为srv可以同时启动多个)\nvar clientConfig = conf.GetSection(\"consul\").GetSection(\"remotes\").GetSection(\"demo\").\n                Get\u003cConsulRemoteServiceConfig\u003e();\n\n//FM.Demo.HelloSrv.HelloSrvClient 是grpc subclass(通过protoc工具生成)\n//ClientAgent是封装了所有客户端调用的类\n//负责做负载, 自动发现新的服务, 踢掉不能用的服务..\n//通过ClientAgent来初始化clientProxy\nvar client =new ClientAgent\u003cFM.Demo.HelloSrv.HelloSrvClient\u003e(clientConfig);\n//Hi是FM.Demo.HelloSrv.HelloSrvClient提供的元方法\nclient.Proxy.Hi(new FM.Demo.HiRequest());\n```\n\n## 了解内部log\n\n可以通过如下的代码来查看内部的log细节\n\n```c#\nFM.ConsulInterop.InnerLogger.ConsulLog += (s, c) =\u003eConsole.WriteLine(c.Content);\n```\n\n## 如何贡献\n\n- issue\n- merge request\n\n## license\n\n MIT\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFollowmeTech%2Ffm.consulinterop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FFollowmeTech%2Ffm.consulinterop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFollowmeTech%2Ffm.consulinterop/lists"}