大家好,又见面了,我是你们的朋友全栈君。
搭建简单的Eureka服务
简单介绍Eureka原理:
Eureka集群主要有三个部分Eureka服务器,服务提供者,服务调用者
简单的来说就是服务提供者将服务注册到Eureka服务器,服务调用者对其服务进行查找调用。
搭建三个项目:
这个项目用来提供给服务提供者和服务调用者注册的地方。
对于服务注册中心,我们需要引入EurakeServer组件,在pom.xml中就需要有以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
然后我们还需要进行下面的配置,虽然我们已经引入了EurakeServer 组件,但我们还需要启用它,编写服务启动类的时候(也就是main方法启动spring boot)要通过@EnableEurekaServer去启用Eurake(后面很多组件也需要类似的方式去启用):
package com.example.demoeureka1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer //启动服务注册中心
public class DemoEureka1Application {
public static void main(String[] args) {
new SpringApplicationBuilder(DemoEureka1Application.class).web(true).run(args);
}
}
接下来在resources/application.yml中添加如下配置,设置服务器端口以及相关信息:
#更改端口为8761
server:
port: 8761
eureka:
client:
#该应用为注册中心,是否将自己注册到注册中心,默认为true,false代表不向注册中心注册自己
register-with-eureka: false
#设置与EurekaServer 交互的地址,查询服务和注册服务都依赖这个地址
service-url:
defaultZone: http://localhost:8761/eureka
#表示是否从EurekaServer获取注册信息,默认为true,表示需要从其他server同步信息
fetch-registry: false
现在,一个简单的Eurake服务器已经写好了~ 启动服务,打开http://localhost:8761/ 我们能看见Eurake服务器控制台, 但还没有服务注册进来:
这个项目用来编写和提供一个个的应用服务组件给服务调用者调用,它需要在上边的注册中心注册。
对于服务提供者,将服务器的spring-cloud-starter-eureka-server依赖改为spring-cloud-starter-eureka即可:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
然后编写启动类,main方法启动和服务器的一样 new SpringApplicationBuilder(XXX(启动类类名).class).web(true).run(args),服务提供者同样要在启动类上边加上@EnableEurekaClient注解:
@SpringBootApplication
@EnableEurekaClient
public class DemoEureka1TwoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoEureka1TwoApplication.class, args);
}
}
下面再编写一个实体类police和PoliceController,有人报警则派出一个警察,相当于警察局:
@Controller
@Configuration
public class PersonController {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@GetMapping(value = "/call/{id}")
@ResponseBody
public String call(@PathVariable Integer id){
RestTemplate restTemplate = getRestTemplate();
return restTemplate.getForObject("http://first-police/call/" + id ,String.class);
}
}
在resources/application.yml中添加如下相应的配置,需要将服务提供者注册到Eureka服务器上,服务器的端口设置的8761:
#应用端口号为8080
server:
port: 8080
#服务名称
spring:
application:
name: first-police
#注册到注册中心
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka
这个项目用来调用服务提供者的服务组件,它也是需要在注册中心注册。
对于服务调用者,需要在服务提供者的基础上再加入负载均衡相关的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
先编写启动类,除了类名,这里写的跟上边服务提供者的启动类一模一样。
然后编写PersonController类,来“报警”。需要新加@Configuration注解,以及配置RestTemplate,RestTemplate本来是spring-web下面的类用来调用REST服务。本身不具备调用分布式服务的能力,但是被@LoadBalanced修饰后就具有访问分布式服务的能力了(具体涉及负载均衡)。因为是注册到Eureka服务器的,所以在内部请求的时候只需要转到相应的服务提供者就可以了:http://first-police/xxx ,代码如下:
@Controller
@Configuration
public class PersonController {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@GetMapping(value = "/call/{id}")
@ResponseBody
public String call(@PathVariable Integer id){
RestTemplate restTemplate = getRestTemplate();
return restTemplate.getForObject("http://first-police/call/" + id ,String.class);
}
}
同样在resources/application.yml中添加如下相应的配置,也需要注册到服务器。上面的服务提供者设置端口是8080(不设置的话默认就是8080),现在将调用者端口设置8081,否则启动会出错:
#更改端口为8081
server:
port: 8081
#服务名称
spring:
application:
name: first-person
#注册到注册中心
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
依次启动项目:
依次启动服务注册中心,服务提提供者和服务调用者。访问Eureka控制台就可以看到注册进去的first-police(服务提供者)和first-person(服务调用者),表示两个已经在注册中心注册成功:
最后访问http://localhost:8081/call/id,页面就会返回某个police的josn信息:
服务调用者。访问Eureka控制台就可以看到注册进去的first-police(服务提供者)和first-person(服务调用者),表示两个已经在注册中心注册成功:
[外链图片转存中…(img-H1UohP8T-1563345334382)]
最后访问http://localhost:8081/call/id,页面就会返回某个police的josn信息:
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141896.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...