首页
归档
留言
友链
广告合作
壁纸
更多
美女主播
Search
1
博瑞GE车机升级/降级
5,610 阅读
2
Mac打印机设置黑白打印
4,952 阅读
3
修改elementUI中el-table树形结构图标
4,896 阅读
4
Mac客户端添加腾讯企业邮箱方法
4,675 阅读
5
intelliJ Idea 2022.2.X破解
4,358 阅读
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
登录
/
注册
Search
标签搜索
Spring Boot
Java
Vue
Spring Cloud
Mac
MyBatis
WordPress
MacOS
asp.net
Element UI
Nacos
.Net
Spring Cloud Alibaba
MySQL
Mybatis-Plus
Typecho
jQuery
Java Script
IntelliJ IDEA
微信小程序
Laughing
累计撰写
627
篇文章
累计收到
1,421
条评论
首页
栏目
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
页面
归档
留言
友链
广告合作
壁纸
美女主播
搜索到
3
篇与
的结果
2021-07-29
Spring Cloud集成Sentinel之使用OpenFein实现服务调用
在Spring Cloud使用OpenFeign调用Nacos服务提供者中,我们介绍了OpenFeign调用Nacos的方式。在Spring Cloud集成Sentinel之@SentinelResource注解使用一文中,我们也介绍了@SentinelResource注解,但是注解的方式。本文我们更进一步,介绍以下OpenFeign如何与Setinel集成。添加依赖<?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"> <parent> <artifactId>Cloud2020</artifactId> <groupId>cc.lisen</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloudalibaba-consumer-order9003</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </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-actuator</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.5</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> </dependencies> </project>修改配置文件server: port: 8888 spring: application: name: nacos-consumer-order cloud: nacos: discovery: server-addr: 192.168.120.180:1111 sentinel: transport: dashboard: 192.168.120.180:9000 port: 8719 management: endpoints: web: exposure: include: "*" logging: level: cc.lisen.springcloud.alibaba.service.NacosPaymentService: debug #设置feign客户端超时时间(OpenFeign默认支持ribbon) nacos-provider-payment: ribbon: #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间 ReadTimeout: 5000 #指的是建立连接后从服务器读取到可用资源所用的时间 ConnectTimeout: 5000 NFLoadBalancerRuleClassName: cc.lisen.springcloud.alibaba.config.CustomerBalancerRule sentinel: enabled: true修改启动类@SpringBootApplication //@EnableDiscoveryClient @EnableFeignClients public class NacosConsumerOrderMain8888 { public static void main(String[] args) { SpringApplication.run(NacosConsumerOrderMain8888.class, args); } }定义Feign接口@FeignClient(value = "nacos-provider-payment", fallback = NacosPaymentServiceFallback.class) public interface NacosPaymentService { @GetMapping(value = "/echo/{string}") String echo(@PathVariable("string") String string); } class NacosPaymentServiceFallback implements NacosPaymentService { @Override public String echo(String string) { return "进入feignClient fallback了"; } }定义测试接口 @GetMapping("/echo/{id}") public String echo(@PathVariable("id") String id) { log.info("******************输出:" + id); return nacosPaymentService.echo(id); }
2021年07月29日
1,091 阅读
0 评论
0 点赞
2021-07-27
Spring Cloud使用OpenFeign调用Nacos服务提供者
什么是OpenFeignOpenFeign为微服务架构下服务之间的调用提供了解决方案,OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。Spring Cloud 2020版本已经彻底移除了Netflix相关组件,OpenFeign便是Feign的替换者。本文我们是在Spring Cloud使用Nacos作为服务中心编写服务提供者的基础上进行的,通过OpenFeign调用前面编写的nacos-provider-payment服务。编写服务消费者创建cloudalibaba-consumer-order8888工程,调用我们编写的nacos-provider-payment服务。添加依赖<?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"> <parent> <artifactId>Cloud2020</artifactId> <groupId>cc.lisen</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>cloudalibaba-consumer-order9003</artifactId> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </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-actuator</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.5</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> </dependencies> </project>修改配置文件修改application.yml增加Nacos相关配置。server: port: 8888 spring: application: name: nacos-consumer-order cloud: nacos: discovery: server-addr: 192.168.120.180:1111 management: endpoints: web: exposure: include: "*" 修改启动类添加@EnableFeignClients注解,支持使用OpenFeign@SpringBootApplication //@EnableDiscoveryClient @EnableFeignClients public class NacosConsumerOrderMain8888 { public static void main(String[] args) { SpringApplication.run(NacosConsumerOrderMain8888.class, args); } }编写Feign客户端添加@FeignClient注解,value便是我们服务提供者的名称。@FeignClient(value = "nacos-provider-payment") public interface NacosPaymentService { @GetMapping(value = "/echo/{string}") String echo(@PathVariable("string") String string); }测试编写controller进行测试@RestController @Slf4j @RequestMapping("/nacos/consumer") public class NacosConsumerController { @Resource private NacosPaymentService nacosPaymentService; @GetMapping("/echo/{id}") public String echo(@PathVariable("id") String id) throws IllegalAccessException { log.info("******************输出:" + id); return nacosPaymentService.echo(id); } }OpenFeign超时控制OpenFeign调用接口,默认超时时间为1S。我们修改一下nacos-provider-payment服务,让放服务暂停2s,然后查看一下接口调用。 @GetMapping(value = "/echo/{string}") public String echo(@PathVariable("string") String string) { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } return "Hello Nacos Discovery " + string+"\t当前服务端口:"+serverPort; }但是有时候我们业务接口可能需要处理的时间较长,那么我们可以配置接口调用的超时时间。我们可以在配置文件中增加以下内容#设置feign客户端超时时间(OpenFeign默认支持ribbon) ribbon: #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间 ReadTimeout: 5000 #指的是建立连接后从服务器读取到可用资源所用的时间 ConnectTimeout: 5000我们再次测试接口,可以发现接口可以正常调用。OpenFeign日志打印功能增加日志bean@Configuration public class FeignConfig { @Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; } }修改配置文件YML文件里配置需要开启日志的Feign客户端logging: level: cc.lisen.springcloud.alibaba.service.NacosPaymentService: debug测试再次调用接口,可以看到输出的日志负载均衡如果我们同时启动了9001、9002端口,也就是说我们针对服务提供者做了集群,那么我们多次调用服务提供者时,会发现系统会依次输出9001、9002端口。也就是说,OpenFeign自带了负债均衡功能,默认采用的时轮询算法。我们修改一下默认的负债均衡算法,设置的简单一点,如果我们的请求包含name=zhangsan参数,就调用到9001端口,否则就调用9002端口。实现IRule接口public class CustomerBalancerRule implements IRule { private ILoadBalancer balancer = new BaseLoadBalancer(); @Override public Server choose(Object object) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String name = request.getParameter("name"); List<Server> servers = balancer.getAllServers(); if ("zhangsan".equals(name)) { if (servers.stream().anyMatch(e -> e.getPort() == 9001)) { return servers.stream().filter(e -> e.getPort() == 9001).collect(Collectors.toList()).get(0); } return servers.get(0); } return servers.get(1); } @Override public void setLoadBalancer(ILoadBalancer iLoadBalancer) { this.balancer = iLoadBalancer; } @Override public ILoadBalancer getLoadBalancer() { return this.balancer; } }配置服务提供者,调用负载均衡算法#设置feign客户端超时时间(OpenFeign默认支持ribbon) nacos-provider-payment: ribbon: #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间 ReadTimeout: 5000 #指的是建立连接后从服务器读取到可用资源所用的时间 ConnectTimeout: 5000 NFLoadBalancerRuleClassName: cc.lisen.springcloud.alibaba.config.CustomerBalancerRule
2021年07月27日
1,150 阅读
0 评论
0 点赞
2021-07-18
Spring Cloud 使用Feign实现声明式Rest调用
Feign是Netflix开发的声明式、模块化的HTTP客户端。Feign可以帮我们更加便捷、优雅的调用HTTP API。在Spring Cloud中,使用Feign非常简单,创建一个接口,并在接口上添加一些注解,代码就完成了。基本使用添加依赖<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-openfeign</artifactId> </dependency> 增加配置文件配置文件与之前类似,不再赘诉。server: port: 8081 eureka: instance: prefer-ip-address: false client: service-url: defaultZone: http://peer1:8761/eureka,http://peer2:8762/eureka spring: application: name: microservice-consumer-movie修改启动类,增加@EnableFeignClients@SpringBootApplication @EnableFeignClients public class MicroserviceConsumerMovieApplication { public static void main(String[] args) { SpringApplication.run(MicroserviceConsumerMovieApplication.class, args); } }增加Feign接口/** * 博客:https://lisen.cc * Description: * * @Author: 香草物语 * DateTime: 2021-07-18 12:52 */ @FeignClient(name = "microservice-provider-user") public interface UserFeignClient { @RequestMapping(value = "{id}",method = RequestMethod.GET) User findById(@PathVariable Long id); } 调用@RestController public class MovieController { @Resource private DiscoveryClient discoveryClient; // @Resource // private RestTemplate restTemplate; @Resource private UserFeignClient userFeignClient; // @Resource // private LoadBalancerClient loadBalancerClient; @GetMapping("/user-instance") public List<ServiceInstance> showInfo() { return discoveryClient.getInstances("microservice-provider-user"); } @GetMapping("/user/{id}") public User findById(@PathVariable Long id) { // return restTemplate.getForObject("http://microservice-provider-user/"+id, User.class); return userFeignClient.findById(id); } // @GetMapping("log/microservice-provider-user") // public ServiceInstance userLog() { // return loadBalancerClient.choose("microservice-provider-user"); // } }基于代码Feign自定义配置创建配置类创建Feign的配置类UserFeignConfig,需要注意的是,该类不能添加@Configuration注解,如果添加了@Configuration注解,那么该类不能在主应用程序的@ComponentScan注解扫描包内。/** * 博客:https://lisen.cc * Description:feign配置文件 * * @Author: 香草物语 * DateTime: 2021-07-18 15:39 */ public class UserFeignConfig { /** * 将契约改成Feign原生的契约,这样就可以使用Feign自带的注解了 * @return */ @Bean public Contract feignContract(){ return new Contract.Default(); } }修改Feign接口/** * 博客:https://lisen.cc * Description: * * @Author: 香草物语 * DateTime: 2021-07-18 12:52 */ @FeignClient(name = "microservice-provider-user",configuration = UserFeignConfig.class) public interface UserFeignClient { /** * 使用Feign自带的注解 @RequestLine * @param id * @return */ @RequestLine("GET /{id}") User findById(@Param("id") Long id); }测试@RestController public class MovieController { @Resource private DiscoveryClient discoveryClient; // @Resource // private RestTemplate restTemplate; @Resource private UserFeignClient userFeignClient; // @Resource // private LoadBalancerClient loadBalancerClient; @GetMapping("/user-instance") public List<ServiceInstance> showInfo() { return discoveryClient.getInstances("microservice-provider-user"); } @GetMapping("/user/{id}") public User findById(@PathVariable Long id) { // return restTemplate.getForObject("http://microservice-provider-user/"+id, User.class); return userFeignClient.findById(id); } // @GetMapping("log/microservice-provider-user") // public ServiceInstance userLog() { // return loadBalancerClient.choose("microservice-provider-user"); // } }再次访问http://localhost:8081/user/1,查看输出全局配置以上我们是根据服务进行配置的,我们也可以进行全局配置。在启动类中添加@EnableFeignClients注解@SpringBootApplication @EnableFeignClients(defaultConfiguration = UserFeignConfig.class) public class MicroserviceConsumerMovieApplication { public static void main(String[] args) { SpringApplication.run(MicroserviceConsumerMovieApplication.class, args); } } 使用属性自定义Feign配置配置指定名称的Feign Client修改配置文件server: port: 8081 eureka: instance: prefer-ip-address: false client: service-url: defaultZone: http://peer1:8761/eureka,http://peer2:8762/eureka spring: application: name: microservice-consumer-movie feign: client: config: microservice-provider-user: contract: feign.Contract.Default修改Feign接口@FeignClient(name = "microservice-provider-user") public interface UserFeignClient { /** * 使用Feign自带的注解 @RequestLine * @param id * @return */ @RequestLine("GET /{id}") User findById(@Param("id") Long id); }配置全局Feign Client修改配置文件,将指定名称的Feign Client改成default即可。server: port: 8081 eureka: instance: prefer-ip-address: false client: service-url: defaultZone: http://peer1:8761/eureka,http://peer2:8762/eureka spring: application: name: microservice-consumer-movie feign: client: config: default: contract: feign.Contract.DefaultFeign对压缩的支持可以通过以下配置对请求或相应进行压缩。feign: compression: request: enabled: true mime-types: text/xml,application/xml,application/json min-request-size: 2048 response: enabled: true配置Feign日志feign: client: config: default: contract: feign.Contract.Default logging-level: full compression: request: enabled: true mime-types: text/xml,application/xml,application/json min-request-size: 2048 response: enabled: true logging: level: cc.lisen.microserviceconsumermovie.service.UserFeignClient: debug
2021年07月18日
978 阅读
0 评论
0 点赞