springcloud+eureka+feign负载均衡

谁借莪1个温暖的怀抱¢ 2022-03-30 09:26 389阅读 0赞

目前,在Spring cloud 中服务之间通过restful方式调用有两种方式

  • restTemplate+Ribbon
  • feign
    现在咱们采用feign进行负载均衡,他的好处就是可以实现接口式的负载均衡,符合接口式的开发规范,而不是像ribbon,要结合restTemplate,通过Feign直接找到服务接口,由于在进行服务调用的时候融合了Ribbon技术,所以也支持负载均衡作用。

服务如下:
注意这里没有的dept-80服务,它被dept-feign服务代替。
在这里插入图片描述

1 microservicecloud-api

它主要为其他服务提供实体类和接口服务,打成,写成后打成jar即可
我们也可以将feign服务接口写在dept-feign服务里面,但是这些接口可能会被其他服务所调用,所以建议写在api中。
在这里插入图片描述
pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  2. <modelVersion>4.0.0</modelVersion>
  3. <parent>
  4. <groupId>com.wuk.springcloud</groupId>
  5. <artifactId>microservicecloud</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. </parent>
  8. <artifactId>microservicecloud-api</artifactId>
  9. <dependencies><!-- 当前Module需要用到的jar包,按自己需求添加,如果父类已经包含了,可以不用写版本号 -->
  10. <dependency>
  11. <groupId>org.projectlombok</groupId>
  12. <artifactId>lombok</artifactId>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.springframework.cloud</groupId>
  16. <artifactId>spring-cloud-starter-feign</artifactId>
  17. </dependency>
  18. </dependencies>
  19. </project>

DeptClientService.java

  1. package com.wuk.service;
  2. import java.util.List;
  3. import org.springframework.cloud.netflix.feign.FeignClient;
  4. import org.springframework.web.bind.annotation.PathVariable;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RequestMethod;
  7. import com.wuk.entity.Dept;
  8. @FeignClient(value = "producers")
  9. public interface DeptClientService {
  10. @RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
  11. public Dept get(@PathVariable("id") long id);
  12. @RequestMapping(value = "/dept/list", method = RequestMethod.GET)
  13. public List<Dept> list();
  14. @RequestMapping(value = "/dept/add", method = RequestMethod.POST)
  15. public boolean add(Dept dept);
  16. }

然后将其打成jar,引入到其他服务中。

2 microservicecloud-consumer-dept-feign

在这里插入图片描述
pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  2. <modelVersion>4.0.0</modelVersion>
  3. <parent>
  4. <groupId>com.wuk.springcloud</groupId>
  5. <artifactId>microservicecloud</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. </parent>
  8. <artifactId>microservicecloud-consumer-dept-feign</artifactId>
  9. <dependencies>
  10. <dependency>
  11. <groupId>com.wuk.springcloud</groupId>
  12. <artifactId>microservicecloud-api</artifactId>
  13. <version>${project.version}</version>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-web</artifactId>
  18. </dependency>
  19. <!-- 修改后立即生效,热部署 -->
  20. <dependency>
  21. <groupId>org.springframework</groupId>
  22. <artifactId>springloaded</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-devtools</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.cloud</groupId>
  30. <artifactId>spring-cloud-starter-eureka</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.cloud</groupId>
  34. <artifactId>spring-cloud-starter-config</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.cloud</groupId>
  38. <artifactId>spring-cloud-starter-feign</artifactId>
  39. </dependency>
  40. </dependencies>
  41. </project>

application.yml

  1. server:
  2. port: 80
  3. eureka:
  4. client:
  5. register-with-eureka: false
  6. service-url:
  7. defaultZone: http://127.0.0.1:7001/eureka/

DeptController_Consumer.java

  1. package com.wuk.controller;
  2. import java.util.List;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.web.bind.annotation.PathVariable;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import com.wuk.entity.Dept;
  8. import com.wuk.service.DeptClientService;
  9. @RestController
  10. public class DeptController_Consumer {
  11. @Autowired
  12. private DeptClientService service = null;
  13. @RequestMapping(value = "/consumer/dept/add")
  14. public boolean add(Dept dept) {
  15. return service.add(dept);
  16. }
  17. @RequestMapping(value = "/consumer/dept/get/{id}")
  18. public Dept get(@PathVariable("id") Long id) {
  19. return service.get(id);
  20. }
  21. @SuppressWarnings("unchecked")
  22. @RequestMapping(value = "/consumer/dept/list")
  23. public List<Dept> list() {
  24. return service.list();
  25. }
  26. }

DeptConsumer80_Feign_App.java

  1. package com.wuk;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  5. import org.springframework.cloud.netflix.feign.EnableFeignClients;
  6. import org.springframework.context.annotation.ComponentScan;
  7. @SpringBootApplication
  8. @EnableEurekaClient
  9. @EnableFeignClients(basePackages= { "com.wuk"})
  10. @ComponentScan("com.wuk")
  11. public class DeptConsumer80_Feign_App {
  12. public static void main(String[] args) {
  13. SpringApplication.run(DeptConsumer80_Feign_App.class, args);
  14. }
  15. }

剩下的两个服务方和服务注册中心上一篇有,不做赘述。

发表评论

表情:
评论列表 (有 0 条评论,389人围观)

还没有评论,来说两句吧...

相关阅读

    相关 负载均衡

    对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等,当单机容量达到极限...

    相关 负载均衡

    近来面试有被问到负载均衡,整理一下我所理解的。 一、 负载均衡(Load Balance):负载均衡的意思是分摊到多个处理机制,已达到各处理机制使用率最大化。这个使用率

    相关 负载均衡

    一、计算机集群 1、什么是计算机集群    计算机集群简称集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,

    相关 负载均衡

    定义 > 负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外供应效力而无需其他服务器的辅助。经过某种负载分管技术,将外部发送

    相关 负载均衡

    一、什么是负载均衡(Load balancing) 在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但是随着业务量越来越大,无论是性能上还是稳定性上都有了更大的