今天我们开始正式编码,如何创建spring boot项目这篇文章就不再讲述,如果想要了解可以阅读我之前的文章springboot学习进阶(一)----创建springboot项目_麻侬的博客-CSDN博客。
首先我们先进行Spring cloud五大组件之一的注册中心,之前文章已经讲过注册中心的介绍,今天我们来部署Netflix的Eureka,进行单机部署以及高可用部署,并开发生产者以及消费者来进行测试eureka的注册消费。(ps:系列文章使用的Spring cloud版本为2021.0.4,对应的spring boot版本2.6.11)
1、Eureka服务
我们在主工程目录下面新创建一个Module,名字eureka-server,引入下面的依赖
-
<dependencies>
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
-
</dependency>
-
</dependencies>
这个子工程只是作为eureka的注册中心,无需引入其他jar包。
创建配置文件yaml
-
server:
-
port:
8761
-
eureka:
-
instance:
-
hostname: localhost
-
client:
-
registerWithEureka:
false
-
fetchRegistry:
false
-
serviceUrl:
-
defaultZone: http:
//${eureka.instance.hostname}:${server.port}/eureka/
-
-
spring:
-
application:
-
name: eureka-server
registerWithEureka:是否将自己注入到注册中心,因为本身就是Eureka服务,默认为true,所以这里设置为false;
fetchRegistry:是否从注册中心获取注册列表,后续进行集群部署的时候需要获取其他Eureka服务,这里是单点的所以设置为false;
其他参数可自行参考官网配置。
创建服务启动类
-
-
@SpringBootApplication
-
@EnableEurekaServer
-
public
class
EurekaServerApplication {
-
-
public
static
void
main
(String[] args) {
-
SpringApplication.run(EurekaServerApplication.class, args);
-
}
-
}
@EnableEurekaServer 此注解是Eureka服务server端注解,如果是服务客户端client,需要注解为@EnableEurekaClient。
至此我们的一个Eureka服务就创建完成了,启动之后我们就获取了一个单节点的注册中心。
2、服务提供者
依然是spring boot项目的三板斧,创建项目引入依赖、创建配置文件、创建启动类。创建Module命名provider-eureka8001,引入依赖
-
<dependencies>
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
<version>
2.6
.11</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-actuator</artifactId>
-
<version>
2.6
.11</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
-
</dependency>
-
</dependencies>
创建配置文件application.yml,填写下面内容
-
server:
-
port:
8001
-
spring:
-
application:
-
name: provider
-
-
eureka:
-
client:
-
serviceUrl:
-
defaultZone: http:
//localhost:8761/eureka/
spring.application.name是项目的名称,后面eureka服务注册列表将会使用此值;
eureka.client.serviceUrl.defaultZone是Eureka注册中心的注册地址,如果Eureka服务部署在另外的地方,需要对应修改ip跟端口,这里本地部署直接localhost即可。
创建启动类
-
@SpringBootApplication
-
@EnableEurekaClient
-
public
class
ProviderEureka8001Application {
-
public
static
void
main
(String[] args) {
-
SpringApplication.run(ProviderEureka8001Application.class,args);
-
}
-
}
这里作为服务客户端使用@EnableEurekaClient
3、服务消费者
创建Module命名consumer-eureka8002,引入依赖
-
<dependencies>
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
<version>
2.6
.11</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-actuator</artifactId>
-
<version>
2.6
.11</version>
-
</dependency>
-
<dependency>
-
<groupId>org.springframework.cloud</groupId>
-
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
-
</dependency>
-
</dependencies>
创建配置文件application.yml
-
server:
-
port:
8002
-
spring:
-
application:
-
name: comsumer
-
-
eureka:
-
client:
-
serviceUrl:
-
defaultZone: http:
//localhost:8761/eureka/
创建启动文件
-
@SpringBootApplication
-
@EnableEurekaClient
-
public
class
ConsumerEureka8002Application {
-
public
static
void
main
(String[] args) {
-
SpringApplication.run(ConsumerEureka8002Application.class,args);
-
}
-
}
4、Ribbon服务调用测试
启动上面三个服务,访问eureka管理页面,默认为http://localhost:8761

可以看到,我们的两个服务provider以及consumer已经全部注册成功,测试调用我们配置Ribbon作为调用负载均衡,来进行测试服务是否可以调用。
在provider项目创建provider的服务ProviderController
-
@RestController
-
@RequestMapping("/provider")
-
public
class
ProviderController {
-
-
@Value("${server.port}")
-
private String port;
-
-
-
@GetMapping("/getPort")
-
public String
getPort
(){
-
return
"访问服务的端口为:" + port;
-
}
-
}
在consumer项目配置Ribbon的负载均衡注入RibbonConfig
-
@Configuration
-
public
class
RibbonConfig {
-
-
@Bean
-
@LoadBalanced
-
public RestTemplate
loadBalancedRestTemplate
(){
-
return
new
RestTemplate();
-
}
-
}
在consumer项目创建消费的ConsumerController,这里调用的方式为http:// + 服务提供者注册名称(spring.application.name),这里是提供者的名字provider,加上服务的path。
-
@RestController
-
@RequestMapping("/consumer")
-
public
class
ConsumerController {
-
-
@Autowired
-
private RestTemplate loadBalancedRestTemplate;
-
-
@GetMapping("/getProviderPort")
-
public String
getProviderPort
(){
-
return loadBalancedRestTemplate.getForObject(
"http://provider/provider/getPort",String.class);
-
}
-
}
启动项目,在网页里面输入请求地址http://localhost:8002/consumer/getProviderPort,可以看到访问成功且返回的是provider的端口号

转载:https://blog.csdn.net/qq904748592/article/details/127622558
