七天学会SpringCloud分布式微服务——03——Nacos远程调用

1、微服务项目配置类放在地方

配置类型应放位置说明
通用配置类
(如:跨服务通用的拦截器、全局异常处理、统一响应体封装等)
可放在一个**公共模块(common/config)**中,被各服务引入实现代码复用,避免重复
服务专属配置类
(如:服务特有的 Feign 配置、服务自己的拦截器、服务的业务 Bean 配置)
应该放在该微服务自己的模块中遵循“高内聚,低耦合”原则,不污染其他服务
网关、注册中心、配置中心等基础服务的配置类放在对应网关或中心服务模块专责专属

2、Nacos注册中心宕机了,远程调用还能使用吗

  • 如果调用过就可以,如果没有调用过就不可以

3、 远程调用的三种方式(以order微服务调用product为例)

3.1 首先就是要获取到service-product的微服务

  • 引入依赖
        <!-- Nacos服务发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

  • 注入@Resource DiscoveryClient discoveryClient
  • 获取所有service-product微服务实例

        // 1、获取product的所有ip+端口号,因为要远程调用了吗
        List<ServiceInstance> instances = discoveryClient.getInstances("service-product");

3.2 如何发送调用呢

选择RestTemplate 或者 WebClient,这里使用前者

  • 编写配置类:
@Configuration
public class AppConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

  • 注入配置类 @Resource RestTemplate restTemplate
  • 使用
    	// 3、拼接远程URL
        String url = "http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/product/"+productId;
        // 4、给远程发请求
        return restTemplate.getForObject(url, Product.class);

3.3 负载均衡的远程调用

  • 引入依赖:
       <!--负载均衡依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
    </dependencies>

  • 注入依赖 @Resource LoadBalancerClient loadBalancerClient;
  • 使用
 private Product getProductFromRemoteBalance(Long productId)
    {
        // 1、choose
        ServiceInstance choose = loadBalancerClient.choose("service-product");




        // 2、拼接远程URL
        String url = "http://"+choose.getHost()+":"+choose.getPort()+"/product/"+productId;

        System.out.println(url);


        // 3、给远程发请求

        return restTemplate.getForObject(url, Product.class);
    }

3.4 负载均衡远程调用注解(推荐,不用获取服务了)

  • 在远程调用配置类中加入注解@LoadBalanced
@Configuration
public class ServiceConfig {
    /*远程调用自动负载均衡*/
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

  • 使用
 private Product getProductFromRemoteWithAno(Long productId)
    {


        // 1、拼接远程URL
        String url = "http://service-product/product/"+productId;

        System.out.println(url);

        // 2、给远程发请求
        return restTemplate.getForObject(url, Product.class);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值