因为每个IDE新建项目过程可能不同,所以在官网上建项目:https://start.spring.io/
至少需要建三个项目,才可以完成这个流程:
- eureka 注册中心项目 (需要引入eureka-server组件) -- 注册中心的服务端
- product-service 服务提供者项目 (需要引入eureka-client组件) -- 注册中心的客户端
- consumer 消费者项目 (需要引入eureka-client组件) -- 注册中心的客户端
第一步:新建eureka注册中心项目(即服务端的搭建)
1.新建项目
下载解压,用IDE打开就是一个项目了。
2.在项目目录下新建 application.yml文件,填写配置内容
server:
port: 8201 # 注册中心的端口号
eureka:
instance:
hostname: eureka-8201 # 本实例的访问主机,即:Status列中链接的hostname部分。 如果 prefer-ip-address 项设置为true,则这里将会使用对应服务的IP
client:
register-with-eureka: false # 是否向注册中心注册自己,这里只有一台就不注册了
fetch-registry: false # 要不要去注册中心获取其他服务的地址,这里只有一台就不需要了
service-url:
defaultZone: http://localhost:${server.port}/eureka # 注册中心提供服务的地址,服务器开放的通信地址,其它服务可以通过这个地址注册过来(就是发注册的请求给注册中心)
# http://域名:端口 域名是要给别的服务能访问到的(测试的时候在本机所以用localhost了,也可以用127.0.0.1),端口就是本注册中心的端口${server.port}表示用的本注册中心的端口,即8201
server:
enable-self-preservation: false # 是否允许开启自我保护模式
eviction-interval-timer-in-ms: 5000 # Eureka服务器清理无效节点的时间间隔,单位:毫秒
3.给启动类添加注释 @EnableEurekaServer 说明需要开启注册中心功能
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class Eureka8201Application {
public static void main(String[] args) {
SpringApplication.run(Eureka8201Application.class, args);
}
}
这样,服务端就建好了,可以启动一下:访问 http://localhost:8201/
能访问表示启动成功。
第二步,创建服务提供者项目:
1.新建项目
下载并打开,这个项目里要提供一个可以访问的服务接口。
2.新建配置文件:application.yml
spring:
application:
name: product-service # 服务提供项目的实例名称
server:
port: 8202 # 服务提供项目的端口号
eureka:
client:
serviceUrl: # 这一项配置名称 与 service-url 效果相同
defaultZone: http://localhost:8201/eureka/ # 注册中心的服务地址
3.启动类添加注解:@EnableEurekaClient 表名是注册中心的一个客户端
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ProductService8202Application {
public static void main(String[] args) {
SpringApplication.run(ProductService8202Application.class, args);
}
}
4.创建一个控制器类(Controller),来提供服务:
package com.example.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class IndexController {
// 注入本项目的端口号
@Value("${server.port}")
private String port;
// 提供一个接口用于提供服务
@GetMapping("/index")
public String index() {
return "index : " + port;
}
}
把项目运行起来,刷新下注册中心的页面,会看到服务提供者已经注册到注册中心了:
服务提供者已经就绪,等待消费者来访问。
第三步,新建服务消费者项目:
1.新建项目,除了项目名称外,其它的与服务提供者完全相同:
2.新建文件 application.yml :
spring:
application:
name: consume # 消费者的实例名称
server:
port: 8203 # 消费者实例的端口号
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8201/eureka/ # 注册中心的服务地址,用于将消费者注册进去
3.主启动类开启客户端:@EnableEurekaClient
4.新建一个ApplicationConfig.java 来注入RestTemplate,我们用它来调接口:
注意下要加 @LoadBalanced 这个注解,否则会报异常:java.net.UnknownHostException
package com.example.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ApplicationConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
5.新建一个控制器,编写方法:
package com.example.controller;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class IndexController {
@Resource
RestTemplate restTemplate;
@GetMapping("/a")
public String index(){
// 直接使用注册中心,服务提供项目的项目名称去请求就可以了
String url = "http://PRODUCT-SERVICE/index";
String result = restTemplate.getForObject(url, String.class);
return result;
}
}
启动消费者。
刷新下注册中心:
访问下消费者
为了验证下可以起到注册中心的作用,再开一个服务提供者,把服务提供者的配置商品改一下,再启动起来一个:
刷新下现在的注册中心,可以看到又新出现了一个服务提供者,端口是:8222
再刷新消费者,可以看到端口号在交替出现:
完毕。
搭建注册中心集群,参考:https://blog.csdn.net/nece001/article/details/106828313