ribbon客户端负载均衡

在消费者中引入

   <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.0.2.RELEASE</version>
        </dependency>

写yml

server:
  port: 80

eureka:
  client:
    registerWithEureka: false # 服务注册,false表示不将本消费者注册到 Eureka 服务器
    fetchRegistry: true # 服务发现,true从 Eureka 服务器中获取注册信息
    serviceUrl:
      default

配置类上加上

  • 注解 @LoadBalanced
    加上了这个注解之后就配置了
    RestTemplate()的负载均衡 而且 可以不用域名的调用服务 而可以用对应服务在yml 中写的服务名称调用
    就实现了负载均衡
 */
@Configuration //标识配置类
public class ConfigBean {

   @LoadBalanced
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

}

配置类上标识@EnableEurekaClient


@SpringBootApplication
public class ProductConsumer_80 {

    public static void main(String[] args) {
        SpringApplication.run(ProductConsumer_80.class, args);
    }

}


image.png

检测:
(http://localhost/consumer/product/list)

创建provider集群

  • 复制pom 的依赖

  • 改yml的端口

  • 数据库名
    不用改应用名称

    他是在数据库里面用了一个字段来存 数据库


    image.png

对应了不同数据库的访问


image.png
image.png

但是是同一个服务 只会有一个服务名

feign 客户端接口调用

使用:

通过定义接口
接口上加注解 使用
就像 mapper 和service一样
就不用resettlement 进行远程调用了
导入pom

     <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

复制 consumer 的pom和com包 yml
写service 接口 和provider里面的一样
删掉resettlement 的config 配置类

controller 上调

  @Autowired
   ProductClientService service;

    @RequestMapping(value = "/consumer/product/add")
    public boolean add(Product product) {
        return service.add(product);
    }

service 这里面只有接口 而且是再注册中心找指定了服务名称

  • 注意:
    接口上的参数必须有@之类的注解 spring mvc
    boolean add(@RequestBody Product product);
    Product get(@PathVariable("id") Long id);
  • 返回值为复杂数据类型时 类型中必须要有无参构造方法
    如下的: Product
@FeignClient(value = "microservice-product") //指定调用的微服务名称
public interface ProductClientService {

    @RequestMapping(value = "/product/add", method = RequestMethod.POST)
    boolean add(@RequestBody Product product);

    @RequestMapping(value = "/product/get/{id}", method = RequestMethod.GET)
    Product get(@PathVariable("id") Long id);

    @RequestMapping(value = "/product/list", method = RequestMethod.GET)
    List<Product> list();

}

启动类上

@EnableEurekaClient
@SpringBootApplication
//会扫描指定包下面使用@FeignClient标识的接口
@EnableFeignClients(basePackages = "com.mengxuegu.springcloud.service")

开启服务测试
然后关闭服务提供者
他自己的客户端就会自己熔断


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容