[Micro] Ebizal school service -SpringCloud (Eureka + Ribbon) Four

new module:
demoribbon,

dependency:

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

Here Insert Picture Description
application.properpites:

server.port = 8763

eureka.client.serviceUrl.defaultZone= http://localhost:8761/eureka/
spring.application.name= SPRING-CLIENT-02

SPRING-CLIENT-01.ribbon.NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

DemoribbonApplication:

package com.huizhi.demoribbon;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableEurekaClient
public class DemoribbonApplication {

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

    // 将RestTemplate注入到spring容器中
    // LoadBalanced负载均衡默认为轮询
    // 通过注入在controller中就可以使用调用生产者实例
    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }

    @Bean
    public IRule ribbonRule() {
        return new RandomRule();   //这里配置策略,和配置文件对应
    }
}

Controller:

package com.huizhi.demoribbon.controller;

import com.huizhi.demoribbon.service.RibbonService;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/getInfo")
public class Controller {
    @Autowired
    RibbonService ribbonService;
    private static final Logger logger = LoggerFactory.getLogger(Controller.class);
    @Value("${server.port}")
    String port;
    @Value("${spring.application.name}")
    String serviceName;
    @RequestMapping("/show")
    public String getInfo(){
        return "I'm form service:"+serviceName+",port:"+port;
    }
    @RequestMapping("/hellol")
    public String showInfol(){
        System.out.println("find port");
        logger.info("find port");
        return ribbonService.port();
    }
}

IRibbonService:

package com.huizhi.demoribbon.service;

public interface IRibbonService {
}

RibbonService:

package com.huizhi.demoribbon.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class RibbonService implements IRibbonService {
    @Autowired
    RestTemplate restTemplate;
    @Autowired
    LoadBalancerClient loadBalancerClient;
    public String port() {
        this.loadBalancerClient.choose("SPRING-CLIENT-01");
        String info = restTemplate.getForObject("http://SPRING-CLIENT-01/getInfo/port", String.class);
        return restTemplate.getForObject("http://SPRING-CLIENT-01/getInfo/port", String.class);
    }
}
Published 268 original articles · won praise 47 · views 30000 +

Guess you like

Origin blog.csdn.net/weixin_39593940/article/details/103841206