SpringCloud四:Ribbon+Rest服務消費者

 

簡介

SpringCloudRibbon是Netflix下的一個開源項目,是基於NetflixRibbon實現的,主要作用是基於HTTP和TCP爲客戶端做負載均衡,其默認是採用的輪詢方式進行負載均衡,通過SpringCloud進行封裝後可以非常方便的進行Rest請求。

爲了測試ribbon的負載均衡我們可以再創建一個eureka-service1,也可以在idea中設置啓動多實例,修改一下端口號爲8763,這樣就相當於一個集羣了。

接下來就是創建ribbon

1.首先創建一個名稱爲ribbon的springboot項目再在properties中加入相關配置

spring.application.name=client-ribbon

server.port=8764

eureka.client.serviceUrl.defaultZone=http://user:pwd@localhost:8761/eureka/

#實例改爲IP顯示,默認false
eureka.instance.prefer-ip-address=true

#自定義註冊中心服務實例顯示格式
#默認是${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}
eureka.instance.instance-id=${spring.application.name}:${server.port}

2.加入對應的pom文件

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

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

在spring-cloud-starter-netflix-eureka-client JAR裏已經包含了我們所需要的Ribbon了,所以就不用重複添加了

3.在SpringBoot的啓動類上加上@EnableEurekaClient註解,向註冊中心進行註冊,再注入一個Bean restTemplate,並加上@LoadBalanced註解,給與了restTemplate負載均衡的功能。

//可以是其他的註冊中心 如:zookeeper,
//@EnableDiscoveryClient
//註冊中心必須是eureka
@EnableEurekaClient
@SpringBootApplication
public class RibbonApplication {

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

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

4.寫一個測試service,用restTemplate來消費eureka-service,這裏一定要用服務ID不能用IP+端口號來進行調用

@Service
public class RibbonService {

    @Autowired
    private RestTemplate restTemplate;


    public String ribbon(String name) {
        //必須使用服務名稱,不能使用IP:端口號
        String address="http://eureka-service/find;
      return   restTemplate.getForObject(address,String.class);
    }
}

再寫一個Controller對Service進行調用

@Slf4j
@RestController
public class RibbonController {

    @Autowired
    private RibbonService ribbonService;


    @RequestMapping(value = "find", method = RequestMethod.GET)
    public String ribbon() {
        String result = ribbonService.ribbon();
        log.info("返回結果:{}", result);
        return result;
    }

}

在瀏覽器中輸入http://localhost:8764/find,多請求幾次,會發現ribbon是對eureka-service是進行交替消費的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章