赞
踩
package com.sun.springcloud.config; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * Description: 配置Ribbon的负载均衡算法为RandomRule * * @Author sun * @Create 2024/3/25 14:43 * @Version 1.0 */ @Configuration public class RibbonRule { @Bean public IRule myRibbonRule() { return new RandomRule(); } }
由于使用的负载均衡算法是RandomRule,所以在发现服务之后的调用是随机的
<dependencies> <!-- 引入openfeign的依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- 引入eureka的客户端场景启动器 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <!-- 使用版本仲裁 --> </dependency> <!-- springboot web starter 用来监听端口--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 如果在子工程/模块指定了 version,则以指定为准 --> </dependency> <!-- 1. starter-actuator 是 springboot 程序的监控系统,可以实现健康检查,info 信息 等 2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. --> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 公共模块的jar包 --> <dependency> <groupId>org.example</groupId> <artifactId>e_commerce_center-common-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
server:
port: 81 # 监听81端口
spring:
application:
name: member-service-consumer-openfeign-81
eureka: # eureka客户端配置
client:
register-with-eureka: true # 将自己注册到eureka服务
fetch-registry: true # 发现服务功能,如果是集群,必须要能发现服务才能配合ribben进行负载均衡
service-url:
# 需要注册到两个服务,则只需要用逗号间隔
defaultZone: http://eureka9001.com:9001/eureka/, http://eureka9002.com:9002/eureka/
package com.sun.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; /** * Description: * * @Author sun * @Create 2024/3/25 15:23 * @Version 1.0 */ @SpringBootApplication @EnableEurekaClient public class MemberConsumerOpenfeignApplication { public static void main(String[] args) { SpringApplication.run(MemberConsumerOpenfeignApplication.class, args); } }
package com.sun.springcloud.service; import com.sun.springcloud.util.Result; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; /** * Description: 使用@FeignClient注解进行服务发现,并准备好要远程调用的方法 * * @Author sun * @Create 2024/3/25 15:49 * @Version 1.0 */ @Component // 注入容器 @FeignClient("MEMBER-SERVICE-PROVIDER") // 消费者进行服务发现找到指定的提供者的http://ip+端口 public interface MemberFeignService { / * 要远程调用的方法,直接粘贴过来即可 * 此时的url = http://MEMBER-SERVICE-PROVIDER/member/get/{id} * @param id * @return */ @GetMapping("/member/get/{id}") // 这里使用的路径参数 public Result getMemberById(@PathVariable("id") Long id); }
package com.sun.springcloud.controller; import com.sun.springcloud.service.MemberFeignService; import com.sun.springcloud.util.Result; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * Description: 注入MemberFeignService的代理对象,使用代理对象进行远程调用 * * @Author sun * @Create 2024/3/25 15:55 * @Version 1.0 */ @RestController public class MemberConsumerOpenfeignController { /* 注入一个针对接口MemberFeignService的代理对象,使用这个代理对象可以直接远程调用服务发现的方法 */ @Resource private MemberFeignService memberFeignService; @GetMapping("/member/get/{id}") // 这里使用的路径参数 public Result getMemberById(@PathVariable("id") Long id) { return memberFeignService.getMemberById(id); } }
package com.sun.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.openfeign.EnableFeignClients; /** * Description: * * @Author sun * @Create 2024/3/25 15:23 * @Version 1.0 */ @SpringBootApplication @EnableEurekaClient // 作为EurekaClient启动 @EnableFeignClients public class MemberConsumerOpenfeignApplication { public static void main(String[] args) { SpringApplication.run(MemberConsumerOpenfeignApplication.class, args); } }
package com.sun.springcloud.config; import feign.Logger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * Description: 配置OpenFeign日志 * * @Author sun * @Create 2024/3/25 16:34 * @Version 1.0 */ @Configuration public class OpenFeignConfig { @Bean public Logger.Level level() { return Logger.Level.FULL; } }
# 以debug的形式输出MemberFeignService接口的日志
logging:
level:
com.sun.springcloud.service.MemberFeignService: debug
ribbon:
ReadTimeout: 8000 # 从服务提供方获取到可用资源的全部时间
ConnectionTimeout: 8000 # 两端建立连接时间
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。