Spring-Clould-Alibaba-集成Ribbon&Feig…
2020-04-14 16:08:24来源:博客园 阅读 ()
Spring-Clould-Alibaba-集成Ribbon&Feign
Spring-Clould-Alibaba-集成Ribbon
1. RestTemplate上添加注解@LoadBalanced
2. 在调用时, 就可以使用服务名称来进行调用 , 和之前的使用Eureka方式 是一样的
默认使用是轮询策略
@RequestMapping("/getGoods")
public ResponseResult getGoods() {
String url="http://goods-provide/getGoods";
return ResponseResult.success("操作成功",
restTemplate.getForObject(url,Object.class));
}
3. 自定义负载均衡策略
在启动类上添加
@Bean
public IRule Irule(){
return new RandomRule();//随机负载均衡
}
4. 配置懒加载
# 饥饿加载(懒加载) 已启动就获取服务
ribbon:
eager-load:
enabled: true
clients: goods-provide #多个服务使用逗号隔开
5. Nacos集成Ribbon,支持权重的负载均衡算法
- 自定义权重算法
创建一个类,继承AbstractLoadBalancerRule类 实现如下方法
public class IRuleConfig extends AbstractLoadBalancerRule {
@Autowired
private NacosDiscoveryProperties nacosDiscoveryProperties;
@Override
public void initWithNiwsConfig(IClientConfig iClientConfig) {
}
@Override
public Server choose(Object key) {
try {
BaseLoadBalancer loadBalancer = (BaseLoadBalancer)this.getLoadBalancer();
//获取请求微服务的名称
String name = loadBalancer.getName();
//获取nacos服务发现相关名称
NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();
//nacos client自动通过基于权重的负载均衡算法,选择实例
Instance instance = namingService.selectOneHealthyInstance(name);
System.out.println("端口:"+instance.getPort()+"实例:"+instance);
return new NacosServer(instance);
} catch (NacosException e) {
e.printStackTrace();
return null;
}
}
}
- 在启动类上启用
- 创建一个子模块和goods一样 更改端口号
启动所有服务 - 在nacos服务中心当中配置服务的权重
Spring-Clould-Alibaba-集成Feign
使用步骤
1. 在客户端引入依赖 user
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2. 在启动类上面加上注解:@EnableFeignClients
创建服务FeignClient
- 创建一个service文件夹,在该文件下创建一个接口,在接口加上添加@FeignClient()注解 参数就是你的微服务名字
@FeignClient(name="goods-provide")
public interface FeiginClient {
@RequestMapping("/getGoods")
public Object getGoods();
}
- 在控制器中注入,并调用
@Autowired
private FeiginClient feiginClient;
@RequestMapping("/getGoods")
public ResponseResult getGoods() {
return ResponseResult.success("操作成功",
feiginClient.getGoods());
}
启动测试
3.单个参数请求
1.在goods中 编写带参数的请求
@RequestMapping("/getGoodsWithID/{id}")
public ResponseResult getGoodsWithID(@PathVariable Integer id){
return ResponseResult.success("id="+id);
}
- 在FeiginClient编写接口
@RequestMapping("/getGoodsWithID/{id}")
public ResponseResult getGoodsWithID(@PathVariable Integer id);
- 在controller中调用
@RequestMapping("/getGoodsWithID/{id}")
public ResponseResult getGoodsWithID(@PathVariable Integer id){
return ResponseResult.success("操作成功",
feiginClient.getGoodsWithID(id));
}
启动测试
4. 多个参数请求
- 创建一个子工程 放实体类
- 创建实体类Goods 实现序列化接口和get set方法
public class Goods implements Serializable {
private String name;
private String color;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
- 在其他工程依赖实体包
<dependency>
<groupId>com.dj</groupId>
<artifactId>GoodsPojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
- 在goods工程的controller中创建带多个参数的方法
- 在FeiginClient中创建接口 注意写上@SpringQueryMap注解,否则传值接收不到
- 在controller中调用
@RequestMapping("/getGoodsWithObj")
public ResponseResult getGoodsWithObj(Goods goods){
return ResponseResult.success("操作成功",
feiginClient.getGoodsWithObj(goods));
}
启动测试
原文链接:https://www.cnblogs.com/joker-dj/p/12700916.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 【spring cloud hoxton】Ribbon 真的能被 spring-cloud-load 2020-06-08
- Spring Cloud Ribbon 客户端负载均衡 2020-06-04
- 微服务项目持续集成部署流程简介 2020-05-27
- 客服端负载均衡:Spring Cloud Ribbon 2020-05-24
- Spring Boot 开发集成 WebSocket,实现私有即时通信系统 2020-05-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash