Java 微服务之 SpringCloud快速入门day02 (二)Feign

import org.springframework.cloud.client.discovery.DiscoveryClient;

import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.client.RestTemplate;

import java.util.List;

import java.util.Map;

@RestController

@RequestMapping(“consumer”)

@DefaultProperties(defaultFallback = “defaultFallback”)

public class ConsumerController {

//@Autowired

// private RestTemplate restTemplate;

/*

@Autowired

private DiscoveryClient discoveryClient;

*/

@Autowired

private UserClient userClient;

@GetMapping(“/{id}”)

public User queryById(@PathVariable(“id”) Long id) {

return userClient.queryBuId(id);

}

@GetMapping(“/{id}”)

//@HystrixCommand(fallbackMethod = “queryByIdFallback”) //开启线程隔离和服务降级(HystrixCommand失败服务的指令)

/* @HystrixCommand(commandProperties = {

@HystrixProperty(name = “execution.isolation.thread.timeoutInMilliseconds”,value = “3000”)

})

*/

//fallbackMethod失败的时候调用的方法,成功 时候默认调用下面的方法

@HystrixCommand(

commandProperties = {

//设置请求的次数为10次当请求请求失败超过5次的时候打开熔断

@HystrixProperty(name = “circuitBreaker.requestVolumeThreshold”,value = “10”),

//短路多久以后开始尝试是否恢复,默认5s 这里设置为10s

@HystrixProperty(name = “circuitBreaker.sleepWindowInMilliseconds”,value = “10000”),

//出错百分比阈值,当达到此阈值后,开始短路。默认60%

@HystrixProperty(name = “circuitBreaker.errorThresholdPercentage”,value = “60”)

}

)

/*

public String queryById(@PathVariable(“id”) Long id) {

if(id % 2 == 0){

throw new RuntimeException(“”);

}

String url = “http://user-service/user/” + id;

String user = restTemplate.getForObject(url, String.class);

return user;

}

*/

//fallbackMethod失败的时候调用的方法,与成功时候调用的方法的名称可以不一样,但是返回值和参数必须相同

public String queryByIdFallback(Long id) {

return “不好意思,服务器态拥挤了”;

}

public String defaultFallback() {

return “不好意思,服务器态拥挤了”;

}

/*

@GetMapping(“/{id}”)

public User queryById(@PathVariable(“id”) Long id) {

//根据服务id获取实例

//List instances = discoveryClient.getInstances(“user-service”);

//从实例当中取出IP和端口

//ServiceInstance instance = instances.get(0);

//随机,论询、hash

//ServiceInstance instance = client.choose(“user-service”);

//String url = “http://”+ instance.getHost()+“:”+instance.getPort()+“/user/”+id;

//System.out.println(url);

//底层还是上述的代码,内部通过拦截器将请求拦截下来,

//获取到user-service自动去负载均衡后获取ip地址将user-service替换

String url = “http://user-service/user/” + id;

User user = restTemplate.getForObject(url, User.class);

return user;

}

*/

}

(5)完善ConsumerApplication:开启Feign功能

在这里插入图片描述

package com.itzheng;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.SpringCloudApplication;

import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;

import org.springframework.cloud.openfeign.EnableFeignClients;

import org.springframework.context.annotation.Bean;

import org.springframework.web.client.RestTemplate;

//@EnableCircuitBreaker

//@EnableDiscoveryClient

//@SpringBootApplication

@EnableFeignClients

@SpringCloudApplication

public class ConsumerApplication {

/* @Bean

@LoadBalanced

public RestTemplate restTemplate(){

return new RestTemplate();

}*/

public static void main(String[] args) {

SpringApplication.run(ConsumerApplication.class,args);

}

}

(6)删除这两个依赖,因为在Feign当中已经有了该依赖

在这里插入图片描述

全部依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

cloud-demo

com.itzheng.demo

1.0.0-SNAPSHOT

4.0.0

consumer-demo

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

2.0.1.RELEASE

org.springframework.cloud

spring-cloud-starter-openfeign

2.0.1.RELEASE

(7)开启Feign熔断机制

去掉之前的注解

在这里插入图片描述

设置Feign当中熔断的超时时长,开启熔断功能

在这里插入图片描述

ribbom:

ConnectionTimeOut: 500 #如果500毫秒没有获取的请求异常就抛出异常

ReadTimeOut: 2000 #如果超过2000秒没有获取到请求返回的值就抛出异常

feign:

hystrix:

enabled: true #开启熔断功能

完善UserClient

创建UserClientImpl实现类

在这里插入图片描述

package com.itzheng.consumer.client;

import com.itzheng.consumer.pojo.User;

import org.springframework.stereotype.Component;

@Component

public class UserClientImpl implements UserClient {

@Override

public User queryBuId(Long id) {

return null;

}

}

完善UserClient类

在这里插入图片描述

package com.itzheng.consumer.client;

import com.itzheng.consumer.pojo.User;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(value = “user-service” ,fallback = UserClientImpl.class)

public interface UserClient {

@GetMapping(“user/{id}”)

User queryBuId(@PathVariable(“id”) Long id);

}

完善UserClientImpl实现类

在这里插入图片描述

package com.itzheng.consumer.client;

import com.itzheng.consumer.pojo.User;

import org.springframework.stereotype.Component;

@Component

public class UserClientImpl implements UserClient {

@Override

public User queryBuId(Long id) {

User user = new User();

user.setName(“未知用户!”);

return user;

}

}

(8) 重新运行项目

在这里插入图片描述

http://localhost:8088/consumer/8

在这里插入图片描述

停止user-service

在这里插入图片描述

再次访问

在这里插入图片描述

(9)请求压缩在这里插入图片描述
(10)日志级别

在这里插入图片描述

最后总结我的面试经验

2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

BAT面试经验

实战系列:Spring全家桶+Redis等

其他相关的电子书:源码+调优

面试真题:

了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB
U3MDM0,size_16,color_FFFFFF,t_70)

最后总结我的面试经验

2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

[外链图片转存中…(img-MZuPQNml-1724307745591)]

BAT面试经验

实战系列:Spring全家桶+Redis等

[外链图片转存中…(img-3dSjIqd0-1724307745592)]

其他相关的电子书:源码+调优

[外链图片转存中…(img-rB31PGDd-1724307745592)]

面试真题:

[外链图片转存中…(img-qu6sgExT-1724307745593)]

[外链图片转存中…(img-2l4WH7wV-1724307745593)]

了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值