zoukankan      html  css  js  c++  java
  • .netcore的微服务学习(二)--网关(gateway)之Ocelot学习

    一,引用ocelot,本文测试16版本有BUG,只好使用15.0.7

    二,startup的配置,很简单,就是注册和添加管道

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using Microsoft.Extensions.Logging;
    using Ocelot.DependencyInjection;
    using Ocelot.Middleware;
    
    namespace OcelotDemo
    {
        public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            public IConfiguration Configuration { get; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddOcelot();
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                ///使用coelot
                app.UseOcelot();
            }
        }
    }

    三,写配置文件,5001是我们控制台启动的端口,这个注意不要映射错

    {
      "ReRoutes": [
        {
          "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5001 //服务端口
            } //可以多个,自行负载均衡
          ],
          "UpstreamPathTemplate": "/OcelotDemo/{url}", //网关地址--url变量   //冲突的还可以加权重Priority
          "UpstreamHttpMethod": [ "Get", "Post" ]
        }
      ]
    }

    四,启动项目

    dotnet OcelotDemo.dll urls="http://*:5003" --ip="127.0.0.1" --port=5003

    五,访问http://localhost:5003/OcelotDemo/User/Get,这个可以拿到http://localhost:5001/api/User/Get地址的值,由于网关地址映射

    六,多实例的配置

    //*****************************多地址多实例,提供多种路由,可是不是集群********************************
    {
      "ReRoutes": [
        {
          "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5001 //服务端口
            } //可以多个,自行负载均衡
          ],
          "UpstreamPathTemplate": "/OcelotDemo5001/{url}", //网关地址--url变量   //冲突的还可以加权重Priority
          "UpstreamHttpMethod": [ "Get", "Post" ]
        },
        {
          "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5002 //服务端口
            }
          ],
          "UpstreamPathTemplate": "/OcelotDemo5002/{url}", //网关地址--url变量
          "UpstreamHttpMethod": [ "Get", "Post" ]
        }
      ]
    }

    访问的方法是http://localhost:52830/OcelotDemo5001/User/get和http://localhost:52830/OcelotDemo5002/User/get,所以需要访问两个地址,这个不是集群

    七,单服务的负载均衡配置,如下

    //*****************************单地址多实例负载均衡********************************
    {
      "ReRoutes": [
        {
          "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5001 //服务端口
            } //可以多个,自行负载均衡
            ,
            {
              "Host": "localhost",
              "Port": 5002 //服务端口
            }
          ],
          "UpstreamPathTemplate": "/OcelotDemo/{url}", //网关地址--url变量   //冲突的还可以加权重Priority
          "UpstreamHttpMethod": [ "Get", "Post" ],
          "LoadBalancerOptions": {
            "Type": "RoundRobin" //轮询      LeastConnection-最少连接数的服务器   NoLoadBalance不负载均衡 三种模式
          }
        }
      ]
    }

    启动网关dotnet OcelotDemo.dll urls="http://*:5003" --ip="127.0.0.1" --port=5003,我们可以使用同一个地址访问,http://localhost:5003/OcelotDemo/User/Get

     八,UserController的写法请求的get接口

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.CompilerServices;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Configuration;
    
    namespace ConsulTestDemo.Controllers
    {
        [Route("api/[controller]/[action]")]
        [ApiController]
        public class UserController : ControllerBase
        {
            public IConfiguration _configuration;
            public UserController(IConfiguration configuration)
            {
                _configuration = configuration;
            }
    
            [HttpGet]
            public string Get()
            {
                return int.Parse(_configuration["port"]).ToString() + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //命令行参数必须传入   
            }
        }
    }
  • 相关阅读:
    爆炸函数 explode
    创建 hive 用户自定义函数UDF,UDTF,UDAF
    数据仓库
    elasticsearch源码分析及插件开发
    JVM垃圾回收机制
    条件阻塞Condition的应用
    java 线上问题定位工具
    都是套路:高并发系统的降级特技
    java并发编程--Runnable Callable及Future
    什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
  • 原文地址:https://www.cnblogs.com/May-day/p/13303330.html
Copyright © 2011-2022 走看看