星星博客 »  > 

Spring Cloud系列_25 网关实现Nginx和Zuul

Nginx

nginx的安装(windows为例) 这里用的是稳定版本:nginx-1.20

  1. 官网下载,注意保存路径不要有中文
  2. 解压运行根目录下nginx.exe
  3. 访问localhost:80出现Nginx欢迎界面表示启动成功
  4. 修改配置文件:找到http下的server节点,增加下面两个配置,意为访问/api-product跳转到http://localhost:8071/
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
		#路由到商品服务
		location /api-product {
            proxy_pass http://localhost:8071/;
        }
		#路由到订单服务
		location /api-consumer {
            proxy_pass http://localhost:8702/;
        }
    }

测试:

http://localhost/api-product/provider/getProductsById/1

http://localhost/api-consumer/order/getProducts/1

都能正常返回

Zuul

创建一个Zuul网关项目 

service-zuul-server-8710

pom.xml

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
    </dependencies>

appliaction.xml

server:
    port: 8710
spring:
  application:
      name: service-zuul-server
# zuul路由规则配置
zuul:
    routes:
        service-provider-zuul: #路由 ID 自定义
            path: /provider-zuul/** #配置请求url对应的映射路径
            url: http://localhost:8071/ #映射路径对应的微服务地址
        service-consumer-zuul: #路由 ID 自定义
            path: /consumer-zuul/** #配置请求url对应的映射路径
            url: http://localhost:8702/ #映射路径对应的微服务地址
通配符含义
通配符含义举例解释
?匹配任意单个字符/provider-zuul/?/provider-zuul/a,/provider-zuul/b
*匹配任意数量字符不包括子路径/provider-zuul/*/provider-zuul/aa,/provider-zuul/bb
**匹配任意数量字符包括所有子路径/provider-zuul/**/provider-zuul/aa,/provider-zuul/bb/cc/dd

启动类开启@EnableZuulProxy

测试 http://localhost:8710/provider-zuul/provider/getProductsById/1 和 http://localhost:8710/consumer-zuul/order/getProducts/1 都能正常访问

 

Zuul 根据Eureka注册中心服务ID进行配置路由

还是使用service-zuul-server-8710

原理是把项目在Eureka注册中心进行注册后可以使用其他服务的注册ID进行配置路由,当然被配置的模块也要在注册中心里配置

添加Eureka依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

修改配置

server:
    port: 8710
spring:
  application:
      name: service-zuul-server

#配置 Eureka Server注册中心
eureka:
    instance:
        prefer-ip-address: true #是否使用IP地址注册
        instance-id: ${spring.cloud.client.ip-address}:${server.port}  #定义名称显示格式
    client:
        service-url: #注册中心对外暴露的注册地址
            defaultZone: http://root:123@localhost:8761/eureka/,http://root:123@localhost:8762/eureka/
# zuul路由规则配置
zuul:
    routes:
        service-provider-zuul: #路由 ID 自定义
            path: /provider-zuul/** #配置请求url对应的映射路径
            #url: http://localhost:8071/ #映射路径对应的微服务地址
            serviceId: service-provider-zuul
        service-consumer-zuul: #路由 ID 自定义
            path: /consumer-zuul/** #配置请求url对应的映射路径
            #url: http://localhost:8702/ #映射路径对应的微服务地址
            serviceId: service-consumer-zuul

最后开始要开启@EnableZuulProxy 不过之前已经开启过了

测试 http://localhost:8710/provider-zuul/provider/getProductsById/1 和 http://localhost:8710/consumer-zuul/order/getProducts/1 都能正常访问

 

Zuul 路由默认配置

Zuul为了方便,提供默认路由配置:

  1. 路由ID和服务名称一致
  2. path对应:服务名称/**

举个例子来说对于产品微服务来说,下面的配置已经默认配置好了,当没有个性化的配置需求时,下面的配置可以不写

zuul:
    routes:
        service-provider-zuul: #路由 ID 自定义
            path: /provider-zuul/** #配置请求url对应的映射路径
            #url: http://localhost:8071/ #映射路径对应的微服务地址
            serviceId: service-provider-zuul
        service-consumer-zuul: #路由 ID 自定义
            path: /consumer-zuul/** #配置请求url对应的映射路径
            #url: http://localhost:8702/ #映射路径对应的微服务地址
            serviceId: service-consumer-zuul

测试,把配置都注释掉然后访问http://localhost:8710/service-provider-zuul/provider/getProductsById/1 和 http://localhost:8710/service-consumer-zuul/order/getProducts/1都能正常访问,注意我这里是把之前配置的path属性换成了微服务的名称

相关文章