通过discoveryClient完成nacos接口调用或使用Ribbon实现调用和负载均衡配置

使用discoveryClient

配置依赖

<dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-starteralibaba-nacos-discovery</artifactId>
</dependency>

配置nacos

server:
	port: 9000
spring:
	application:
 		name: xdclass-video-service
	cloud:
		nacos:
			discovery:
				server-addr: 127.0.0.1:8848

启动类添加注解

@EnableDiscoveryClient

controller逻辑

@RestController
@RequestMapping("api/v1/video_order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    private DiscoveryClient discoveryClient;

    @RequestMapping("/save")
    public Object save(int videoId){

        //默认是集群
        List<ServiceInstance> list = discoveryClient.getInstances("video-service");

        //只用第一个  不轮询了
        ServiceInstance serviceInstance = list.get(0);

        //路径和端口不写死
        Video video = restTemplate.getForObject("http://"+ serviceInstance.getHost() +":"+ serviceInstance.getPort() +"/api/v1/video/find_by_id?videoId="+videoId, Video.class);

        VideoOrder videoOrder = new VideoOrder();

        videoOrder.setVideoId(video.getId());
        videoOrder.setVideoTitle(video.getTitle());
        videoOrder.setCreateTime(new Date());

        return videoOrder;

    }

}

这时候获取到的是video-service的ip和端口号
v1/find_by_id?videoId=xx这个接口是通过id查询所有值
这时候运行 http://localhost:8087/save?videoId=40 即可输出两张表都有的的三个值(VideoId,VideoTitle,CreateTime)

使用Ribbon实现负载均衡

在orderApplication添加@LoadBalanced注解

    @Bean
    //使用Ribbon的注解
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
    

然后VideoController进行调用

@RestController
@RequestMapping("api/v1/video_order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/save")
    public Object save(int videoId){

        //直接使用nacos路径
        Video video = restTemplate.getForObject("http://xdclass-video-service/api/v1/video/find_by_id?videoId="+videoId, Video.class);

        VideoOrder videoOrder = new VideoOrder();

        videoOrder.setVideoId(video.getId());
        videoOrder.setVideoTitle(video.getTitle());
        videoOrder.setCreateTime(new Date())return videoOrder;


    }

}

Ribbon配置负载均衡

策略选择:
1、一般不修改策略,默认即可
2、如果部分机器配置强,则可以改为WeightedResponseTimeRule
3.还有别的轮询策略,但一般用不到

xdclass-video-service这个是nacos被调用的服务名称 我在order调用video的服务,所以把这个配置写在order的application中

xdclass-video-service:
	ribbon:
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

结语

Ribbon已经很方便了,但其实有一种更方便的就是Feign,它集成了Ribbon使调用更方便,具体怎么用可以看我下面的文章

https://blog.csdn.net/Andrew0219/article/details/122435346
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Cloud Nacos是一个非常流行的微服务注册中心和配置中心,而Ribbon则是一个负载均衡组件。结合起来,可以实现服务的自动发现和负载均衡。 下面是一个简单的示例: 1. 在pom.xml文件中添加依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> ``` 2. 在application.properties或application.yml中配置NacosRibbon: ```yaml # Nacos配置 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 # Ribbon配置 service-provider.ribbon.listOfServers=localhost:8081,localhost:8082 service-provider.ribbon.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList ``` 3. 创建一个Ribbon配置类,用于自定义负载均衡策略等: ```java @Configuration public class RibbonConfig { @Bean public IRule ribbonRule() { return new RandomRule(); // 随机负载均衡策略 } @Bean public IPing ribbonPing() { return new PingUrl(false, "/health"); // 检查服务健康状态的URL } } ``` 4. 在服务消费方的代码中,注入RestTemplate对象,并使用@LoadBalanced注解: ```java @RestController public class ConsumerController { @Autowired private RestTemplate restTemplate; @GetMapping("/hello") public String hello() { String url = "http://service-provider/hello"; return restTemplate.getForObject(url, String.class); } @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } } ``` 在这里,我们使用了"http://service-provider/hello"作为服务提供方的URL,而不是具体的IP和端口。这是因为Ribbon会根据服务名自动选择一个可用的实例。 以上就是使用Spring Cloud NacosRibbon调用服务的基本步骤。需要注意的是,在使用Nacos作为注册中心时,服务提供方需要在启动时注册自己。可以参考Nacos的官方文档或者Spring Cloud官方文档进行配置使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Andrew0219

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值