up:: 整合两个服务

说明: 1. 网关带来很多好处,比如说第一点好处呢?他就是可以进行一个统一的身份验证,为什么?这另外,我们把和用户信息相关的和身份验证相关的内容和代码直接放到网关中去那这样的请求,因为他必须走网关,他每一次经过网关之后,网关就已经帮我们把相关的身份验证的工作给做掉了,就不需要我们每一个服务自己再去做,如果没网关的,将来我们每一个服务自己都要去写一个过滤器,而且这个过滤器和过滤器之间可能还是完全重复的,那其实有没有什么必要对于我们内部服务而言,这请求经过网关之后,我们就已经可以直接拿到用户对象了,所以这样的话就不方便。 2. 那我们的第二个好处呢就是可以帮助我们进行安全处理,考虑到我们对外不可能每个服务都去独立的暴露 ip, 我们的最好的法是通过网关进行统一,这样的话是更加安全的,这样的话就不需要我们每个内部服务都去考虑安全问题,内部与内部之间的调用其实是可信赖的,是可靠的。而外部呢?比如说对于网关而言,它是直接对外的,那外部是有很多风险存在的,比如说呢会有的人,他对我们的系统进行攻击,那这一块我们会有网关来统一的处理,比如说当我们发现某一个 ip 调动次数有异常的时候,我们可以把相关的 ip 给它封掉,这块的工作,其实和我们内部服务的业务逻辑是不相关的,所以我们应该把和安全处理这一块相关的我们统一的交给网关去做。

集成Zuul

新建zuul模块

引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>
</dependencies>
 
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

注册为Eureka Server的一个客户端,引入eureka-client依赖。

建立启动类

package com.imooc.course;
 
import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
 
/**
 * 描述:     网关启动类
 */
@EnableZuulProxy
@SpringCloudApplication
public class ZuulGatewayApplication {
 
    public static void main(String[] args) {
        SpringApplication.run
                (ZuulGatewayApplication.class, args);
    }
}

配置文件

spring.application.name=course-gateway
server.port=9000
logging.pattern.console=%clr(%d{${LOG_DATEFORMAT_PATTERN:HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}
mybatis.configuration.map-underscore-to-camel-case=true
eureka.client.service-url.defaultZone=http://localhost:8000/eureka/

运行测试


通过网关去访问到我们的这个服务

访问course-list服务

访问course-price服务

自定义配置前缀

自定义访问其它服务模块的链接。。。

测试

配置后原来的默认地址会失效!!!