首页
归档
留言
广告合作
友链
美女主播
Search
1
博瑞GE车机升级/降级
5,173 阅读
2
修改elementUI中el-table树形结构图标
4,540 阅读
3
Mac打印机设置黑白打印
4,535 阅读
4
Mac客户端添加腾讯企业邮箱方法
4,372 阅读
5
intelliJ Idea 2022.2.X破解
4,092 阅读
Java
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
登录
/
注册
Search
标签搜索
Spring Boot
Java
Spring Cloud
Mac
mybatis
WordPress
Nacos
Spring Cloud Alibaba
Mybatis-Plus
jQuery
Java Script
asp.net
微信小程序
Sentinel
UniApp
MySQL
asp.net core
IntelliJ IDEA
Jpa
树莓派
Laughing
累计撰写
576
篇文章
累计收到
1,425
条评论
首页
栏目
Java
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
页面
归档
留言
广告合作
友链
美女主播
搜索到
2
篇与
的结果
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>net.xiangcaowuyu</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: net.xiangcaowuyu.springcloud.alibaba.service.NacosPaymentService: debug #设置feign客户端超时时间(OpenFeign默认支持ribbon) nacos-provider-payment: ribbon: #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间 ReadTimeout: 5000 #指的是建立连接后从服务器读取到可用资源所用的时间 ConnectTimeout: 5000 NFLoadBalancerRuleClassName: net.xiangcaowuyu.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,044 阅读
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>net.xiangcaowuyu</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: net.xiangcaowuyu.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: net.xiangcaowuyu.springcloud.alibaba.config.CustomerBalancerRule
2021年07月27日
1,118 阅读
0 评论
0 点赞