1、书接上文
我们已经可以搭建注册中心(eureka)以后,开发的服务需要注册到注册中心(eureka)去,以供其他服务消费者使用
2、开始服务注册项目
(1)项目初始化
从零建立一个 spring boot项目,可以直接访问spring的官方初始化平台 https://start.spring.io/ ,也可以使用idea 上的spring initializr 插件生成,步骤都是一样的。
(如果你已经有一个初始化的spring boot项目可以直接看第二步,直接选择相关的依赖加进去然后 reimport 下maven就可以了)
在写好自己项目的 名称,选择完spring boot 和Java 版本以后选择项目需要的依赖(add dependencies),可以直接搜索eureka,插件里可以直接选择在分类中选择勾选后确认就可以了。
以下为在idea 上的操作步骤:项目上右键=》new=》module=》Spring initializr ,然后next,出现如下界面,修改指出的内容
然后next去选择依赖 Eureka Client(如下图) 最后一路next finish就行了 。
(2)项目概览
以上一番操作以后可以得到一个初始化以后的项目
重要的pom文件如下(如果有一个已经初始化的spring boot项目 直接加入相关的pom 依赖也是可以的)
<?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.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.demo</groupId>
<artifactId>service-provider</artifactId>
<version>0.0.1</version>
<name>service-provider</name>
<description>服务提供者</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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-test</artifactId>
<scope>test</scope>
</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>
</project>
(3)修改yml 配置文件
yml文件( 为application.yml,是由application.properties 重命名而来)如下:
server:
port: 8081
eureka:
client:
serviceUrl:
defaultZone: http://localhost:3000/eureka/ # 注册中心的地址
#defaultZone: http://eureka2:3000/eureka/,http://eureka1:3000/eureka/ # 注册中心的地址 可以填多个
instance:
prefer-ip-address: true #
leaseRenewalIntervalInSeconds: 10
leaseExpirationDurationInSeconds: 30
spring:
application:
name: server-provider # 此应用名字 在注册中心eureka上会根据它作为服务id,在服务消费者方也是以这个名字作为调用的id
(4)添加一个服务接口
我这里定义了一个map集合,存储了id和name的键值对,然后写一个对外提供使用id获取到name的接口具体代码如下:
@RestController
@RequestMapping("/user")
public class UserInfoController {
@GetMapping("/getNameByUserId/{id}")
public String getNameByUserId(@PathVariable("id")int id, HttpServletRequest request){
String userNameById = UserTestInfoConst.getUserNameById(id);
return userNameById+"--查询提供端口:"+ request.getServerPort(); // 端口信息 用于相同服务多次部署时的负载均衡测试
}
}
public class UserTestInfoConst {
private static Map<Integer, String> userName = new HashMap<>();
static {
userName.put(1, "张三");
userName.put(2, "李四");
userName.put(3, "王五");
userName.put(4, "赵六");
userName.put(5, "苦瓜");
}
/**
* 通过区域id 获取区域名称
*
* @param areaId
* @return
*/
public static String getUserNameById(int areaId) {
String s = userName.get(areaId);
return s == null ? "" : s;
}
}
这样一个简单的服务提供者就写好了
(5)启动效果
启动时需要同时启动注册中心(eureka)即yml文件中配置的注册中心也要启动,启动后访问注册中心就可以看到
这时服务提供者就注册到了 注册中心(eureka)了
(6)补充(服务消费者)
此时服务注册中心的服务提供者已经运行,但是仍然需要使用服务消费者前来调用来验证已经注册的服务是否正常;