引入负载均衡

书接上回SpringBoot应用,本文开始介绍如何在消费方引入负载均衡机制,同时简化获取服务提供者信息的流程


目录

一、引入负载均衡

1、添加依赖

2、properties配置

3、主类上添加对应的注解

4、定义对应的控制器,需要访问服务提供者

5、验证测试

 二、缓存配置

三、 订阅更新

四、引入OpenFeign

4.1添加依赖:

4.2定义配置

 4.3在主类或者配置类上添加注解以支持OpenClient应用

4.4定义http伪客户端接口

 4.5定义控制器,通过feign接口调用远程的服务提供者

测试


Spring Cloud引入组件LoadBalance实现负载均衡

一、引入负载均衡

1、添加依赖

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacosdiscovery</artifactId>
     </dependency>
     <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

2、properties配置

代码如下(示例):

spring.application.name=service-consumer 
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口 spring.cloud.nacos.discovery.server-addr=localhost:8848
# 注册到 nacos 的指定 namespace,默认为 public spring.cloud.nacos.discovery.namespace=public 

server.port=6082

3、主类上添加对应的注解

@EnableDiscoveryClient
@SpringBootApplication
public class Consumer2Application {
        public static void main(String[] args) {
            SpringApplication.run(Consumer2Application.class, args);
        }
        @LoadBalanced
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
}

4、定义对应的控制器,需要访问服务提供者

@RestController
@RequestMapping("/consumer")
public class ConsumerController {
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/{name}")
    public String test(@PathVariable String name){
        //使用LB后具体的URL地址中使用服务提供者的名称来替代原始的主机名和端口号
        String res = restTemplate.getForObject("http://service-provider/users/hello?                    username=" + name, String.class);
        return res;
    }
}

5、验证测试

 二、缓存配置

使用LB从Nacos获取服务的注册信息,可以在本地进行缓存。添加配置就可以了。

spring.cloud.loadbalancer.cache.enabled=true 启用本地缓存,可以根据实际情况权衡 spring.cloud.loadbalancer.cache.capacity=1000 设置缓存空间大小 spring.cloud.loadbalancer.cache.ttl=20 缓存的存活时间,单位为s

三、 订阅更新

缓存有可能和远程的注册信息不一致,所以引入长连接的订阅实现Nacos的主动通知更改

spring.cloud.nacos.discovery.watch.enabled=true

 

四、引入OpenFeign

4.1添加依赖:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacosdiscovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

4.2定义配置

server.port=6083 # Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html spring.application.name=service-consumer # Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口 spring.cloud.nacos.discovery.server-addr=localhost:8848 # 注册到 nacos 的指定 namespace,默认为 public spring.cloud.nacos.discovery.namespace=public

 4.3在主类或者配置类上添加注解以支持OpenClient应用

@EnableFeignClients // 激活 @FeignClient
@EnableDiscoveryClient
@SpringBootApplication
public class Consumer3Application {
    public static void main(String[] args) {
        SpringApplication.run(Consumer3Application.class, args);
    }
}

4.4定义http伪客户端接口

@FeignClient("service-provider") // 指向服务提供者应用
public interface ProviderClient {
    @GetMapping("/users/hello")
    public String sayHello(@RequestParam("username") String username);
}

 4.5定义控制器,通过feign接口调用远程的服务提供者

@RestController
@RequestMapping("/consumer")
public class ConsumerController {
    @Autowired
    private ProviderClient providerClient;
    @GetMapping("/{name}")
    public String test(@PathVariable String name){
        String res = providerClient.sayHello(name);
        return res;
    }
}

测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值