SpringCloud基础知识超超级详细(2)

简介: SpringCloud基础知识超超级详细(2)

Feign

创建一个SpringBoot基础工程,取名feigen-counsumer。并在pom文件中引入必要的依赖内容

<!--    引入父工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <projece.reporting.outputEncoding>UTF-8</projece.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
<!--    eureka的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>
<!--    feign的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
    </dependencies>

在引导类上添加@EnableFeignClients注解开启SpringCloud Feignd的支持

//@SpringBootApplication
//@EnableDiscoveryClient
//@EnableCircuitBreaker  //熔断
@SpringCloudApplication //组合注解  熔断+负载+boot启动
@EnableFeignClients  //启用feign组件
public class ConsumerApplication {
    //远程服务间的调用
  /* 使用feigen解决
   @Bean
    @LoadBalanced //开启负载均衡组件
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }*/
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class,args);
    }
}

定义HelloService接口,通过@FeignClient注解指定服务名绑定服务

@FeignClient("service-provider")
public interface HelloService {
    @RequestMapping("/hello")
    String Hello();
}

创建一个ConsumerController来实现对Feign客户端的调用,使用@Autowired直接注入上面的helloService实例

@RestController
public class ConsumerControler {
    @Autowired
    HelloService helloService;
    @RequestMapping(value = "/feign-consumer",method = RequestMethod.GET)
    public String helloConsumer(){
        return helloService.Hello();
    }
}

修改默认配置:端口号,微服务名称,注册给eureka

server:
  port: 9001
spring:
  application:
    name: feign-consumer
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
    register-with-eureka: true #true注册给eureka

测试:


发送几次get请求Http:localhost:9001/feign-consumer,正确返回“hello World”


Zuul

创建一个SpringBoot基础工程,取名SpringCloud-Zuul。并在pom文件中引入必要的依赖内容

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>

在引导类上添加@EnableZuulProxy注解开启SpringCloud Zuul的支持

@SpringCloudApplication
@EnableZuulProxy //启动zuul组件
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class,args);
    }
}

创建LoginFilter继承自ZuulFilter ,添加拦截器的业务代码

@Component
public class LoginFilter extends ZuulFilter {
    /**
     * 过滤器的类型 pre route post error
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }
    /**
     * 执行顺序 返回值越小,优先级越高
     * @return
     */
    @Override
    public int filterOrder() {
        return 10;
    }
    /**
     * 是否执行run方法, true
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }
    /**
     * 编写过滤器的业务逻辑
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {
        //初始化context上下文对象
        RequestContext context = RequestContext.getCurrentContext();
        //获取request对象
        HttpServletRequest request = context.getRequest();
        //获取参数
        String token = request.getParameter("token");
        //拦截
        if (StringUtils.isBlank(token)){
            context.setSendZuulResponse(false);
            //提示信息
            context.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
            //设置相应的提示
            context.setResponseBody("requst error! ");
        }
        //返回值为null,就代表该过滤器什么都不作
        return null;
    }
}

修改默认配置:端口号,微服务名称,注册给eureka

server:
  port: 10010
spring:
  application:
    name: dynamic-zuul
zuul:
  routes:
    service-provider:  /service-provider/**  #路由名称,可以随便写   第三种配置
    # path: /service-provider/** 第一种配置
    # url: http://localhost:8889
    serviceId: service-provider  #  第二种配置
  host:
    connect-timeout-millis: 3000
    socket-timeout-millis: 3000
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

测试:通过网关访问--URL不含token,包含token,打开的界面不一致

image.png

个人总结

Eureka

注册中心:eureka-server


        1.引入启动器


        2配置spring.application.name=dynamic.eureka


        3.在引导类上添加@EnableEurekaServer


客户端:server-provider,server-consumer


       1.引入启动器


       2 配置spring.application.name,eureka.service-url.defaultZone=http://localhost:10086/eureka  


      3.@EnableDiscoveryClient(启动eureka客户端)


Feign

       1.引入openFeign启动器


       2.在引导类上加上@EnableFeignClients


       3.自定义接口,通过@FeignClient注解指定服务名绑定服务


       4.更改默认配置


Zuul

       1.引入Zuul启动器


       2.启动类上添加@EnableZuulProxy注解


       3.创建过滤器,继承ZuulFilter基类,重写四个方法


      4.配置路由  zuul.router. service-provider:  /service-provider/**

相关文章
|
11月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1493 3
|
9月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
前端开发 Java Nacos
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
2567 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
1850 4
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
445 6
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
944 5
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
380 5
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
402 5