我们已经搭建好了 eureka注册中心,(也可以理解为中介平台)
现在我们将我们之前的 服务提供方 和 服务调用方  ,注册到 Eureka注册中心。(可以理解为下载 中介平台)

而注册服务,就是在服务里添加Eureka的客户端依赖,客户端代码会自动将服务注册到EurekaServer中。

我们先来将 服务提供方 注册到 Eureka。

主要分为三步:

  1. 在pom.xml中,添加springcloud的相关依赖。

  2. 在application.yml中,添加springcloud的相关依赖。

  3. 在引导类上添加注解,把服务注入到eureka注册中心。

下面来具体操作下,改造一下yuanxion-service-provider工程

(可以参照eureka依赖配置)
 

先在properties里加一个版本号:

然后加一个版本号统一管理:

引入Eureka客户端依赖:

完整pom.xml文件:
 

<?xml version="1.0" encoding="UTF-8"?>
<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>cn.yuanxion.service.service</groupId>
	<artifactId>yuanxion-service-provider</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>yuanxion-service-provider</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</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.SR2</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>tk.mybatis</groupId>
			<artifactId>mapper-spring-boot-starter</artifactId>
			<version>2.0.4</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

</project>

 

 

然后注册信息到Eureka,

 

到引导类中,启用客户端。

这样就好了,我们重启一下yuanxion-service-provider。

然后刷新或者重新访问一下 http://localhost:10086

可以看到,服务提供方 service-provider 注册成功了,在Eureka注册中心上可以看到了。

 

 

下面,我们再将 服务调用方 service-consume 注册到 Eureka。

也还是同样的三步:

  1. 在pom.xml中,添加springcloud的相关依赖。

  2. 在application.yml中,添加springcloud的相关依赖。

  3. 在引导类上添加注解,把服务注入到eureka注册中心。

改造 yuanxion-service-consumer 工程,可以参照上面的 改造 yuanxion-service-provider工程 的过程 。

步骤一样,就不赘述了。

给出 关键的地方的代码或截图。

第一步,yuanxion-service-consumer 的 pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>cn.yuanxion.service</groupId>
	<artifactId>yuanxion-service-consumer</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>yuanxion-service-consumer</name>
	<description>Demo project for Spring Boot</description>

	<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.SR2</spring-cloud.version>
	</properties>

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

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

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

</project>

第二步: 

第三步: 

 

这样就好了。
重启 yuanxion-service-consumer

然后刷新或者重新访问一下 http://localhost:10086

可以看到,服务提供方 service-provider 注册成功了,在Eureka注册中心上也可以看到了。

 

 这样,我们就成功改造这两个微服务,注册到eureka注册中心了。

 

我们再来解决之前的一个问题:在 服务调用方 consumer中,我们把url地址硬编码到了代码中,不方便后期维护。

下面来 改造一下 服务调用方 ,解决地址硬编码的问题,使其通过微服务的方式来调用。

先大概了解一下eureka的工作原理:
服务提供方信息注册Eureka注册中心
Eureka注册中心 周期检查 服务提供方 是否还在 (renew
服务调用方Eureka注册中心 注册,并提供 需求后, 会从 Eureka注册中心 获取 所有符合需求 的 服务提供方列表
服务调用方 从中选择一个 服务提供方, 就可以使用 服务提供方的服务了。

我们可以在Controller中获取 服务提供方的列表:

然后 可以获取 服务列表, 从中选择一个 服务, 动态获取 服务地址和端口号 ,动态拼接出 地址。

 

@Controller
@RequestMapping("consumer/user") //加个前缀,区分于之前的user
public class UserController {

    @Autowired  //注入RestTemplate,为了远程调用服务提供方的接口
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient; // 包含了获取的所有的服务提供方的列表信息

    @GetMapping
    @ResponseBody
    public User queryUserById(@RequestParam("id")Long id){
        //获取服务列表
        List<ServiceInstance> instances = discoveryClient.getInstances("service-provider");
        //获取一个服务实例
        ServiceInstance instance = instances.get(0);
        return this.restTemplate.getForObject("http://" + instance.getHost() + ":" + instance.getPort() + "/user/" + id,User.class); //获取并反序列化后返回

    }

}  

 

 

我们再来 重启一下  yuanxion-service-consumer

然后重新访问一下 http://localhost/consumer/user?id=1,看看还能不能调用 服务提供方 的方法:

成功了!

我们的 改造微服务到Eureka注册中心就完成了。
(最后那个解决 地址硬编码 问题的方法,这里只是了解一下。因为这个方法还不够好,我们后面会用更好的方式来解决。)