zoukankan      html  css  js  c++  java
  • 微服务入门04 服务发现和消费

    创建项目

    这里创建一个名为MsgService的普通webApi项目

    • 1.设置命令行读取配置文件 见02
    • 2 consul服务注册 见03
    • 3.创建一个心跳检测的controller 见03
    • 4 创建一个测试用例的controller
    [Route("api/[controller]")]  
    public class SMSController : ControllerBase
    {
        //发请求,报文体为{phoneNum:"110",msg:"aaaaaaaaaaaaa"},
        [HttpPost(nameof(Send_MI))]
        public void Send_MI(SendSMSRequest model)
        {
            Console.WriteLine($"通过小米短信接口向{model.PhoneNum}发送短信{model.Msg}");
        }
        [HttpPost(nameof(Send_LX))]
        public void Send_LX(SendSMSRequest model)
        {
            Console.WriteLine($"通过联想短信接口向{model.PhoneNum}发送短信{model.Msg}");
        }
        [HttpPost(nameof(Send_HW))]
        public void Send_HW(SendSMSRequest model)
        {
            Console.WriteLine($"通过华为短信接口向{model.PhoneNum}发送短信{model.Msg}");
        }
    }
    

    启动项目

    编译运行这个项目后 在bin下启动这个项目多个

    我在这里启动了两个分别设置了5001 和5002两个端口
    再把consul以开发模式运行 访问http://127.0.0.1:8500

    这时候这两个服务就被consul"发现"了

    服务消费

    这里用一个控制台程序演示

    install-package consul
    

    打印出所有的登记的consul

    using (var consulClient = new ConsulClient(c => c.Address = new Uri("http://127.0.0.1:8500")))
        {
            var services = consulClient.Agent.Services().Result.Response;
            foreach (var service in services.Values)
            {
                Console.WriteLine($"id={service.ID},name={service.Service},ip={service.Address},port={service.Port}");
            }
        }
    

    这里已经开启了两个msg服务,演示默认访问第一个msg

    实际项目中可能是更多个msg一起运行,要访问哪个msg(每个msg服务都是相同的,可能每个msg服务都在不同的机器上) 就要考虑到负载均衡来分配由哪个msg服务来调度

    var json = "{"PhoneNum":119,"Msg":"aaaa"}";
    using (var consul = new ConsulClient((m) =>
    {
        m.Address = new Uri("http://127.0.0.1:8500");
    }))
    {
        //所有注册到consul的service
        var services = consul.Agent.Services().Result.Response; 
        var msgServices = services.Values.Where(m => m.Service.Equals("MsgService", StringComparison.OrdinalIgnoreCase));               
        var service = msgServices.ElementAt(0);
        try
        {
            using (HttpClient http = new HttpClient())
            using (var httpContent = new StringContent(json, Encoding.UTF8, "application/json"))
            {
                var result = http.PostAsync($"http://{service.Address}:{service.Port}/api/sms/send_lx", httpContent).Result;
                Console.WriteLine(result.StatusCode);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }
    
  • 相关阅读:
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 344 反转字符串
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 原文地址:https://www.cnblogs.com/Amayer/p/9609259.html
Copyright © 2011-2022 走看看