1. 開(kāi)發(fā)Eureka服務(wù)注冊(cè)中心
這里使用的spring cloud版本是Edgware.SR3
使用maven新建一個(gè)quickstart工程,pom文件主要內(nèi)容如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.13.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
新建啟動(dòng)類
@SpringBootApplication
@EnableEurekaServer
public class EurekaRegisterCenter {
public static void main(String[] args) {
SpringApplication.run(EurekaRegisterCenter.class, args);
}
}
這里的@EnableEurekaServer 注解表示啟動(dòng)EurekaServer,即啟動(dòng)服務(wù)注冊(cè)中心。
新建配置文件 src/main/resources/application.yml
server:
port: 8761
eureka:
client:
registerWithEureka: false
fetchRegistry: false
- 這里設(shè)置了端口是8761端口
- eureka.client.registerWithEureka 表明不將自己作用服務(wù)注冊(cè)到別的注冊(cè)中心上,需要注意的是,eureka server同時(shí)也可以是一個(gè)eureka client,也可以注冊(cè)到別的注冊(cè)中心,這一塊我們到后面的高可用集群再說(shuō)。
- eureka.client.fetchRegistry,表示此服務(wù)不抓取注冊(cè)中心信息。
打開(kāi)瀏覽器,輸入http://localhost:8761/,就可以看到Eureka的控制臺(tái)
2.開(kāi)發(fā)服務(wù)提供者
同樣新建一個(gè)工程,pom文件主要內(nèi)容如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.13.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>
新建配置文件 src/main/resources/application.yml
server:
port: 8080
spring:
application:
name: eureka-demo-provider
eureka:
instance:
hostname: localhost
client:
serverUrl:
defaultZone: http://localhost:8761/eureka
配置了端口,服務(wù)名稱,主機(jī)地址,還有服務(wù)注冊(cè)中心的地址
新建一個(gè)用于接收服務(wù)消費(fèi)者調(diào)用的rest接口
@RestController
public class SayHelloController {
@RequestMapping(value = "/sayHello/{name}", method = RequestMethod.GET)
public String sayHello(@PathVariable("name") String name) {
return "hello," + name;
}
}
應(yīng)用啟動(dòng)類
@SpringBootApplication
@EnableEurekaClient
public class EurekaDemoProvider {
public static void main(String[] args) {
SpringApplication.run(EurekaDemoProvider.class, args);
}
}
@EnableEurekaClient,表明這是個(gè)Eureka客戶端應(yīng)用,需要向Eureka服務(wù)端注冊(cè)自己為一個(gè)服務(wù)。
此時(shí)看一下Eureka控制臺(tái),就會(huì)發(fā)現(xiàn)一個(gè)名為eureka-demo-provider的服務(wù)出現(xiàn)。
3.開(kāi)發(fā)一個(gè)服務(wù)調(diào)用者
新建工程,pom文件主要內(nèi)容
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.13.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
</dependencies>
調(diào)用者需要引入spring-cloud-starter-ribbon依賴,因?yàn)槲覀円褂胷ibbon來(lái)進(jìn)行客戶端負(fù)載均衡調(diào)用。
新建配置文件 src/main/resources/application.yml
server:
port: 8081
spring:
application:
name: eureka-demo-consumer
eureka:
instance:
hostname: localhost
client:
serverUrl:
defaultZone: http://localhost:8761/eureka
配置了eureka地址,就可以從eureka抓取到所有注冊(cè)的服務(wù)了
新建一個(gè)配置類,定義RestTemplate,結(jié)合Ribbon可以實(shí)現(xiàn)客戶端負(fù)載均衡,Ribbon我后面的博客也會(huì)寫(xiě)。這里使用@Bean注解,表示注冊(cè)一個(gè)bean到spring上下文中。
@Configuration
public class EurekaDemoConfiguration {
/**
* LoadBalanced 基于ribbon進(jìn)行負(fù)載均衡
* @return
*/
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
新建一個(gè)給用戶訪問(wèn)的rest接口
@RestController
public class GreetingController {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "/greeting/{name}", method = RequestMethod.GET)
public String greeting(@PathVariable("name") String name) {
//使用restTemplate發(fā)送http請(qǐng)求
return restTemplate.getForObject("http://eureka-demo-provider/sayHello/" + name, String.class);
}
}
新建啟動(dòng)類
@SpringBootApplication
@EnableDiscoveryClient
@EnableEurekaClient
public class EurekaDemoConsumer {
public static void main(String[] args) {
SpringApplication.run(EurekaDemoConsumer.class, args);
}
}
然后在瀏覽器里訪問(wèn),http://localhost:8081/greeting/animal。