本節摘要
- 注冊中心搭建euraka
- 服務注冊與發現
- springcloud用戶端調用:rest、feign
- 負載均衡:ribbon
- zuul接口網關
搭建euraka注冊中心
1、搭建項目環境
建立springboot pom 項目
pom.xml依賴配置如下:
<groupId>com.link</groupId>
<artifactId>springcloud01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2、建立eureka注冊中心
- 修改pom.xml依賴
<groupId>com.link</groupId>
<artifactId>eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.link</groupId>
<artifactId>springcloud01</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka- server</artifactId>
</dependency>
</dependencies>
- 配置eureka服務資訊
# 注冊中心端口
server:
port: 8888
# 應用名稱
spring:
application:
name: eurka-server
eureka:
instance:
hostname: localhost
client:
# 禁止自己當做服務注冊
registerWithEureka: false
# 屏蔽注冊資訊
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
- 添加啟動注解
springcloud——服務注冊與發現
啟動服務,如圖所示沒有注冊的服務![]()
springcloud——服務注冊與發現
3、服務注冊
- 配置pom.xml
<groupId>com.link</groupId>
<artifactId>client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>client</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.link</groupId>
<artifactId>springcloud01</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- 修改配置檔案
# 服務提供者端口
server:
port: 8881
spring:
application:
name: server-client
eureka:
client:
serviceUrl:
# 注冊中心位址
defaultZone: http://localhost:8888/eureka/
- 提供服務
啟動類加入注解:
@SpringBootApplication
@EnableEurekaClient
// 添加服務
@RestController
public class ClientController {
@RequestMapping("/getUserList")
public List<String> getUserList() {
List<String> listUser = new ArrayList<String>();
listUser.add("link");
listUser.add("23");
listUser.add("xiamen");
return listUser;
}
}
4、服務消費
ribbon是一個負載均衡用戶端 類似nginx反向代理,
可以很好的控制htt和tcp的一些行為。
Feign預設內建了ribbon。
方式1:ribbon
- 配置pom依賴
<groupId>com.link</groupId>
<artifactId>order</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>order</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>com.link</groupId>
<artifactId>springcloud01</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<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>
<!--ribbon+rest => feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
</dependencies>
- 修改配置
server:
port: 8883
spring:
application:
name: consumer-ribbon
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8888/eureka/
- 配置啟動類
@EnableDiscoveryClient和@EnableEurekaClient作用:
都是能夠讓注冊中心能夠發現,掃描到改服務。
@EnableEurekaClient隻适用于Eureka作為注冊中心
@EnableDiscoveryClient 可以是其他注冊中心。
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
/**
* 開啟負載均衡
* @return
*/
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
- 編寫controller調用服務
@RestController
public class ConsumerController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("/getUserList")
public List<String> hiService() {
// 服務位址+接口
return restTemplate.getForObject("http://server-client/getUserList", List.class);
}
- 測試調用
springcloud——服務注冊與發現
方式2:feign
- 添加依賴
<dependencies>
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
- 修改配置
server:
port: 8883
spring:
application:
name: service-feign
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8888/eureka/
- 服務調用(接口配置方式)
@FeignClient(value = "server-client")
public interface UserInfo{
/**
* 服務接口
* @return
*/
@RequestMapping(value = "/getUserList")
List<String> getUserList();
}
@RestController
public class Controller {
@Autowired
UserInfo userInfo;
@GetMapping(value = "/getUserList")
public List<String> getUserList() {
return userInfo.getUserList();
}
}
// 啟動類配置:
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class Application {}