新建一个模块 eureka-ribbon-client模块:如图
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency>
配置文件application.yml 配置信息
spring: application: name: eureka-ribbon-client server: port: 8765 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
在启动类上添加 注解,@EnableEurekaClient
a)添加负载均衡类 RibbonConfig
@Configuration public class RibbonConfig { @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } }
b)添加ribbon服务类RibbonService,使用时直接调用即可
@Service public class RibbonService { @Autowired RestTemplate restTemplate; public String hi(String name) { return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class); } }
c)使用
@RestController public class RibbonController { @Autowired RibbonService ribbonService; @GetMapping("/hi") public String hi(@RequestParam(required = false,defaultValue = "forezp") String name){ return ribbonService.hi(name); } @Autowired private LoadBalancerClient loadBalancer; @GetMapping("/testRibbon") public String testRibbon() { ServiceInstance instance = loadBalancer.choose("eureka-client"); // URI uri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort())); return instance.getHost()+":"+instance.getPort(); } }
d)测试
分别启动两次eureka-client实例,端口分别为8763,8764
在浏览器输入http://localhost:8765/hi ,轮循执行eureka-client实例的请求
新建eureka-feign-client模块:如下图
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-httpclient</artifactId> <version>RELEASE</version> </dependency>
spring: application: name: eureka-feign-client server: port: 8766 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
@EnableEurekaClient
@EnableFeignClients
a)新建feign请求失败重试策略类 FeignConfig
@Configuration public class FeignConfig { @Bean public Retryer feignRetryer() { return new Retryer.Default(100, SECONDS.toMillis(1), 5); } }
b)新建调用服务的声明式接口类 EurekaClientFeign
@FeignClient(value = "eureka-client",configuration = FeignConfig.class) public interface EurekaClientFeign { @GetMapping(value = "/hi") String sayHiFromClientEureka(@RequestParam(value = "name") String name); }
c)新建调用声明式接口服务类 HiService
@Service public class HiService { @Autowired EurekaClientFeign eurekaClientFeign; public String sayHi(String name){ return eurekaClientFeign.sayHiFromClientEureka(name); } }
d)使用
@RestController public class HiController { @Autowired HiService hiService; @GetMapping("/hi") public String sayHi(@RequestParam( defaultValue = "forezp",required = false)String name){ return hiService.sayHi(name); } }
f)测试
分别启动两次eureka-client实例,端口分别为8763,8764
在浏览器输入http://localhost:8766/hi ,轮循执行eureka-client实例的请求
原文:https://www.cnblogs.com/tanouou/p/12323854.html