码迷,mamicode.com
首页 > 编程语言 > 详细

Consul集群加入网关服务(Spring Cloud Gateway)

时间:2019-09-30 09:19:27      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:port   架构   cli   --   ram   github仓库   地址   代码   增加   

Consul集群加入网关服务

架构示意图

技术图片
外部的应用或网站通过外部网关服务消费各种服务,内部的生产者本身也可能是消费者,内部消费行为通过内部网关服务消费。
一个内部网关和一个外部网关以及一个Consul Client部署在一台服务器上,这样的网关服务器至少2组,外部网关前面还会有负载均衡设备,内部网关服务使用Consul Client进行查询后使用,内部网关的负载均衡由Consul负责了。

搭建演示环境

Consul集群Server+Client模式的基础上,我们更新并启动网关服务和消费者服务,演示环境中我们只启动一个网关服务进行模拟。
删除spring-cloud-gateway和spring-cloud-consul-consumer这两个容器。

docker pull bluersw/spring-cloud-gateway:v3

docker run --name=spring-cloud-gateway -d -p 9000:9000 bluersw/spring-cloud-gateway:v3 /opt/consul/./consul agent -data-dir=/opt/consul/data -config-dir=/opt/consul/config -node=gw-cc  -join 172.17.0.2

docker exec spring-cloud-gateway  /usr/local/java/bin/java -jar /opt/spring-cloud-gateway-0.0.1-SNAPSHOT.jar

docker pull bluersw/spring-cloud-consul-consumer:v3

docker run --name=spring-cloud-consul-consumer -d -p 9003:9003 bluersw/spring-cloud-consul-consumer:v3  /opt/consul/./consul agent -data-dir=/opt/consul/data -config-dir=/opt/consul/config -node=consumer-cc  -join 172.17.0.2

docker exec  spring-cloud-consul-consumer /usr/local/java/bin/java -jar /opt/spring-cloud-consul-client-0.0.1-SNAPSHOT.jar

技术图片
技术图片

TAG:V3版本的网关和消费者镜像修改内容

spring-cloud-gateway的项目配置文件修改如下(也是在本机Consul Client注册),主要是为了增加prefer-ip-address否则Consul获取不到服务的IP地址:

server:
 port: 9000
spring:
  cloud:
    consul:
      host: 127.0.0.1
      port: 8500
      discovery:
        register: true
        prefer-ip-address: true
        health-check-path: /actuator/health
    gateway:
      routes:
        - id: test_route
          uri: lb://service-provider
          predicates:
            - Path=/service-provider/{segment}
          filters:
            - SetPath=/{segment}
            - name: Hystrix
              args:
                name: service-provider-fallback
                fallbackUri: forward:/service-provider-error
            - name: Retry
              args:
                retries: 3
                statuses: BAD_GATEWAY,BAD_REQUEST
      default-filters:
        - name: Hystrix
          args:
            name: fallbackcmd
            fallbackUri: forward:/default-error
  application:
    name: PC-ApiGateWay

为了模拟内部服务调用网关消费其他服务,spring-cloud-consul-client项目(spring-cloud-consul-consumer)添加如下代码:
创建Feign风格的代理类

//网关服务
@FeignClient(name="PC-ApiGateWay")
public interface GatewayRemote {

    //网关上的请求地址和外部用浏览器浏览的路径相同
    @RequestMapping("/service-provider/hello")
    public String Hello(@RequestParam String name);

}

Controller里增加如下方法:

    @Autowired
    GatewayRemote gatewayRemote;
    
       @RequestMapping("/TestGW")
    public String TestGW(){
        String first = gatewayRemote.Hello("first-SWS");
        String second = gatewayRemote.Hello("second-SWS");
        return first + " | " + second;
    }

模拟外部访问

直接在浏览器里访问127.0.0.1:9000/service-provider/hello?name=sws,得到服务的返回信息:
技术图片

模拟内部访问

在浏览器里访问127.0.0.1:9003/TestGW,得到服务的返回信息:
技术图片

源码

Github仓库:https://github.com/sunweisheng/spring-cloud-example

Consul集群加入网关服务(Spring Cloud Gateway)

标签:port   架构   cli   --   ram   github仓库   地址   代码   增加   

原文地址:https://www.cnblogs.com/bluersw/p/11610713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!