一、使用SpringBoot搭建一个简单的web工程作为服务提供者
项目创建成功!
二、修改JDK版本
三、修改pom.xml文件
代码如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.soulmate</groupId>
<artifactId>eureka-service-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<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>Dalston.SR5</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-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
四、在src/main/resources目录中建立application.yml 配置文件。
代码如下:
spring:
application:
name: eureka-service-provider
eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
五、编写启动类,提供一个简单的REST服务
创建Controller文件夹,在文件夹中新建ProviderController
代码如下:
package com.soulmate.server.controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.soulmate.server.model.Person;
@RestController
public class ProviderController {
@RequestMapping(value = "person/{personId}",method = RequestMethod.GET)
public Person findPerson(@PathVariable("personId") String personId){
Person person = new Person();
person.setId(personId);
person.setName("Soulmate");
person.setAge("28");
return person;
}
}
创建Model文件夹,在文件夹中新建Person实体类,实体类中包括id,name,age
创建启动类ProviderApp:
创建完成后 ,首先启动Eureka服务:
该步骤在上篇博客以搭建好:
https://blog.youkuaiyun.com/Soulmate_Min/article/details/88029402
启动后:浏览器进入eureka页面:http://localhost:8761/
页面如下:
然后启动服务提供者ProviderApp:
启动成功后, 刷新Eureka页面
至此,服务提供者成功注册到Eureka注册中心。
六、编写服务调用者:
eureka-service-invoker
创建项目过程与服务提供者一致,这里不过多概述。
pom文件代码:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.soulmate</groupId>
<artifactId>eureka-service-invoker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<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>Dalston.SR5</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-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
配置文件代码application.yml:
server:
port: 9000
spring:
application:
name: eureka-service-invoker
eureka:
instance:
hostname: localhost
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
创建incoker控制类。
在控制器中,配置了RestTemplate的Bean,RestTemplate本来是spring-web模块下面的类,主要来调用Rest服务。本身并不具备调用分布式服务的能力,但是RestTemplate的Bean被@LoadBalanced注解修饰后,这个RestTemplate实例就具有访问分布式服务的能力了。
在控制器中,新建一个router的方法,用来对外发布Rest服务。该方法只起路由作用,实际上是用RestTemplate来调用eureka-service-provider的服务。
具体代码如下:
package com.soulmate.server.controller;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@Configuration
public class InvokerController {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@RequestMapping(value = "/router",method = RequestMethod.GET)
public String router(){
RestTemplate restTpl = getRestTemplate();
//根据应用名称调用服务
String json = restTpl.getForObject("http://eureka-service-provider/person/1", String.class);
return json;
}
}
然后编写启动类:
在启动类中,使用了@EnableDiscoveryClient注解来修饰启动类,该注解使得服务调用者有能力去Eureka中发现服务。
具体代码如下:
package com.soulmate.server;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableDiscoveryClient
public class InvokerApp {
public static void main(String[] args) {
new SpringApplicationBuilder(InvokerApp.class).web(true).run(args);
}
}