SpringCloud基础知识超超级详细_springclound基础详解

在引导类上添加**@EnableEurekaServer注解启动一个服务注册中心**提供给其他应用进行对话

@SpringBootApplication
@EnableEurekaServer //启用Eureka服务
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

修改默认配置,端口号 ,微服务名称,注册中心地址

server:
  port: 10086
spring:
  application:
    name: dynamic.eureka   #微服务的名称  注入到eureka

eureka:
  client:
    service-url:
      defaultZone: http://localhost:${server.port}/eureka


注册服务提供者

创建一个基础的SpringBoot工程,命名为eureka-provider,并在pom文件中引入必要的依赖内容,代码同上

在引导类上添加**@EnableDiscoveryClient注解,将此微服务添加到注册中心**

@SpringBootApplication
@EnableDiscoveryClient  //启动eureka客户端
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class,args);
    }
}

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

server:
  port: 8889

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql:///ssm
    username: root
    password: root
  application:
    name: service-provider  #微服务名称


eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
    register-with-eureka: true #true注册给eureka



注册服务消费者

创建一个基础的SpringBoot工程,命名为eureka-consumer,并在pom文件中引入必要的依赖内容,代码同上

在引导类上添加**@EnableDiscoveryClient注解,将此微服务添加到注册中心**

@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker  //熔断
public class ConsumerApplication {

    public static void main(String[] args) {

        SpringApplication.run(ConsumerApplication.class,args);

    }
}

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

server:
  port: 8887

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql:///ssm
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: service-consumer


eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

    register-with-eureka: true #true注册给eureka

测试:各一个项目都启动,

以上关于注册中心eureka就配置好了。


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,打开的界面不一致**


个人总结

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

总结

三个工作日收到了offer,头条面试体验还是很棒的,这次的头条面试好像每面技术都问了我算法,然后就是中间件、MySQL、Redis、Kafka、网络等等。

  • 第一个是算法

关于算法,我觉得最好的是刷题,作死的刷的,多做多练习,加上自己的理解,还是比较容易拿下的。

而且,我貌似是将《算法刷题LeetCode中文版》、《算法的乐趣》大概都过了一遍,尤其是这本

《算法刷题LeetCode中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

《算法的乐趣》共有23个章节:

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

e中文版》总共有15个章节:编程技巧、线性表、字符串、栈和队列、树、排序、查找、暴力枚举法、广度优先搜索、深度优先搜索、分治法、贪心法、动态规划、图、细节实现题**

[外链图片转存中…(img-3Rk4Wx2o-1723555222541)]

《算法的乐趣》共有23个章节:

[外链图片转存中…(img-xjKTWPIF-1723555222542)]

[外链图片转存中…(img-qDozP7GG-1723555222543)]

  • 第二个是Redis、MySQL、kafka(给大家看下我都有哪些复习笔记)

基本上都是面试真题解析、笔记和学习大纲图,感觉复习也就需要这些吧(个人意见)

[外链图片转存中…(img-U39wQ1ws-1723555222543)]

  • 第三个是网络(给大家看一本我之前得到的《JAVA核心知识整理》包括30个章节分类,这本283页的JAVA核心知识整理还是很不错的,一次性总结了30个分享的大知识点)

[外链图片转存中…(img-cok1qOqN-1723555222544)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值