1. 程式人生 > >Eclipse初次搭建SpringCloud-Feign負載均衡(四)

Eclipse初次搭建SpringCloud-Feign負載均衡(四)

一、Feign簡介

Feign是一個宣告式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要建立一個介面並註解。它具有可插拔的註解特性,可使用Feign 註解和JAX-RS註解。Feign支援可插拔的編碼器和解碼器。Feign預設集成了Ribbon,並和Eureka結合,預設實現了負載均衡的效果。

簡而言之:

  • Feign 採用的是基於介面的註解
  • Feign 整合了ribbon

二、準備工作

繼續用上一節的工程, 啟動discSystem-3,埠為12345; 啟動discSystem-4、discSystem-4-1 ,埠分別為12346、12347.

三、建立一個feign的服務(service-feign)

 

 四、新增application.yml

server:
  port: 12349
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:12345/eureka/
spring:
  application:
    name: service-feign

五、在啟動類ServiceFeignApplication ,加上@EnableFeignClients註解開啟Feign的功能

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ServiceFeignApplication {

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

六、定義一個Feign介面類(SchedualCilentName)

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * 定義一個Feign介面類
 * @author 於志強
 *
 * 2018年11月28日 上午11:43:20
 */
@FeignClient(value = "clientName")
public interface SchedualCilentName {
    // value值必須與discSystem-4、discSystem-4-1中方法名一致
	@RequestMapping(value = "/test",method = RequestMethod.GET)
	String sayHiFromClientOne();
}

七、定義一個對外的Controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * 暴漏一個可以訪問的地址
 * @author 於志強
 *
 * 2018年11月28日 上午11:45:44
 */
@RestController
public class ClientNameController {
	@Autowired
	SchedualCilentName schedualCilentName;
    // controller中的value值不做要求  隨便寫
    @RequestMapping(value = "/demo",method = RequestMethod.GET)
    public String sayHi(){
        return schedualCilentName.sayHiFromClientOne();
    }
}

八、啟動服務

    訪問(http://localhost:12345/

  訪問(http://localhost:12349/demo) 瀏覽器交替顯示:

Hello World!!! 埠為:12346

Hello World!!! 埠為:12347

 

因Feign整合了Ribbon所以直接註解就可以做到負載均衡 

注: 所有的專案都是前面文章中的