Ribbon负载均衡的实现

一,创建服务提供者

创建三个服务提供者分别为8001,8002,8003端口并连接不同的数据库来模拟来自不同的服务器从而实现负载均衡
在这里插入图片描述
三个服务提供者实现相同的业务并提供相同的Rest接口
在这里插入图片描述

mapper

<mapper namespace="com.yyx.springcloud.dao.DeptDao">
    <insert id="addDept" parameterType="Dept">
    insert into dept(dname,db_source) values(#{dname},DATABASE())
    </insert>
    <select id="queryAll" resultType="Dept">
        select * from dept
    </select>
    <select id="queryById" parameterType="Long" resultType="Dept">
        select * from dept where deptno=#{deptno}
    </select>
</mapper>

controller

@RestController
public class DeptController {
    @Autowired
    private DeptService deptService;
    @PostMapping("/dept")
    public int addDept(@RequestBody Dept dept){
        return deptService.addDept(dept);
    }
    @GetMapping("/dept/{id}")
    public Dept queryById(@PathVariable("id") Long id){
        return deptService.queryById(id);
    }
    @GetMapping("/dept")
    public List<Dept> queryAll(){
        return deptService.queryAll();
    }
}

application.yml
三个服务提供者的配置中application.name和instance-id和所连接的数据库修改为自己对应的

server:
  port: 8001
#mybatis的配置
mybatis:
  type-aliases-package: com.yyx.springcloud.pojo
  mapper-locations: classpath:mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true
#spring的配置
spring:
  application:
    name: SPRINGCLOUD-PROVIDER-DEPT
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mydb4?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 123456
#eureka的配置
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  instance:
    instance-id: springcloud-provider-dept8001
#info配置
info:
  app.name: springcloud-study
  company.name: yangyongxin.top

所需依赖:(注意 服务提供者中需导入eureka依赖)

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yyx</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>

二,eureka注册服务

在这里插入图片描述
启动类中添加@EnableEurekaServer注解

application.yml中配置(这里做了eureka集群)

server:
  port: 7001

#eureka配置
eureka:
  instance:
    hostname: eureka7001.com #eureka服务端的实例名称
  client:
    register-with-eureka: false #表示是否向eureka注册中心注册自己
    fetch-registry: false #fetch-registry为false,则表示自己为注册中心
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

三,服务消费者中设置Ribbon负载均衡

在这里插入图片描述
ConfigBean
注入RestTemplate并添加注解LoadBalanced配置负载均衡实现RestTemplate

@Configuration
public class ConfigBean {
    @Bean
    @LoadBalanced//配置负载均衡实现RestTemplate
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

controller
Ribbon实现负载均衡时间不应写为服务的某个地址,写为服务的名字,负载均衡随机访问这个服务所有实例地址

@RestController
public class DeptConsumerController {
    @Autowired
    private RestTemplate restTemplate;//提供多种便捷访问远程http服务的方法,简单的RestFul服务模板
    //Ribbon实现负载均衡时间不应写为服务的某个地址,写为服务的名字,负载均衡随机访问这个服务所有地址
    //private static final String REST_URL_PREFIX="http://localhost:8001";
    private static final String REST_URL_PREFIX="http://SPRINGCLOUD-PROVIDER-DEPT";
    @RequestMapping("/consumer/dept/add")
    public int add(Dept dept){
        return restTemplate.postForObject(REST_URL_PREFIX+"/dept",dept,int.class);
    }
    @RequestMapping("/consumer/dept/get/{deptno}")
    public Dept dept(@PathVariable("deptno") Long deptno){
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/"+deptno,Dept.class);
    }
    @RequestMapping("/consumer/dept/list")
    public List<Dept> dept(){
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept",List.class);
    }
}

application.yml中配置(这里做了eureka集群的配置)

server:
  port: 80
#Eureka配置
eureka:
  client:
    register-with-eureka: false #不向eureka中注册自己
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

所需依赖(注意 服务消费者中需同时添加eureka和ribbon依赖

        <dependency>
            <groupId>com.yyx</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
    </dependencies>

四,测试

访问服务消费者接口地址测试
刷新后会轮询访问三个服务提供者(这里使用数据库名字段用于区分是哪个服务提供者提供的服务)
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LeBron永鑫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值