注册中心在微服务架构中是必不可少的一部分,主要用来实现服务治理功能。
注册中心带来的好处是你不需要知道有多少提供方,你只需要关注注册中心有多少服务即可。
1.Eureka
Spring Cloud Eureka是Spring Cloud Netflix微服务套件的一部分,主要实现服务治理功能。
2.使用Eureka编写注册中心服务
创建一个maven项目fangjia-eureka,需要这些依赖:spring boot,eureka,spring cloud,代码如下:
<!-- Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath />
</parent>
<!-- eureka-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
<!-- Spring Cloud-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>在启动类上加上@EnableEurekaServer,开启Eureka Server接着在application.properties属性文件增加以下配置:
spring.application.name=fangjia-euraka server.port=8761 eureka.instance.hostname=localhost #自己就是注册中心,所以别注册自己 eureka.client.register-with-eureka=false #注册中心职责是维护服务实例,不需要检索服务 eureka.client.fetch-registry=false
3.编写服务提供者
3.1 创建项目注册到Eureka
注册中心建好并启动后,接下来将一个服务提供者fangjia-fsh-house-service注册到Eureka中,并提供一个接口给其他服务调用。
还是创建maven项目,写上相关依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<!--注意这里跟注册中心server是不一样的-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>在启动类上加入@EnableDiscoveryClient,表示当前服务是一个Eureka的客户端。接下来创建一个application.properties文件(创建springboot项目时直接包含的,接下来不在说创建,直接用),添加配置:
spring.application.name=fsh-house server.port=8081 #注册到注册中心去 eureka.client.service-url.defaul-zone=http://localhost:8761/eureka启动服务,打开Eureka的Web控制台,就可以看到新注册的服务信息了。
3.2 编写提供接口
创建一个Controller,提供一个接口给其他服务查询:
@RestController
@RequestMapping("/house")
public class HouseController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}这时通过访问localhost:8081/house/hello,如果能看到返回的hello字符串,证明接口提供成功了。4.编写服务消费者
4.1 直接调用接口
创建一个maven项目fangjia-fsh-substitution-service,然后添加依赖,依赖和服务提供者的一样。启动类也一样。
唯一不一样的是配置信息:
spring.application.name=fsh-substitution server.port=8082RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程HTTP服务的方法,能够大大提高客户端的编写效率。我们
通过配置RestTemplate来调用接口,代码如下:
@Configuration
public class BeanConfiguration {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}创建接口,在接口中调用house/hello接口,代码如下:
@RestController
@RequestMapping("/substitution")
public class SubstitutionController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/callHello")
public String callHello() {
return restTemplate.getForObject("http://localhost:8081/house/hello", String.class);
}
}启动启动类启动消费者服务,访问localhost:8082/substitution/callHello看看有没有返回hello字符串,返回了就证明调用成功。
4.2 通过Eureka来消费接口
上面是直接通过服务接口的地址来调用的,完全没有用到Eureka带给我们的便利。既然用了注册中心,那么客户端调用的时候肯定是不需要关心有多少个服务提供接口,下面我们来改造之前的调用代码。
首先改造RestTemplate的配置,添加一个@LoadBalanced注解,这个注解会自动构造LoadBalancerClient接口的实现类并注册到Spring容器中,代码如下:
@Configuration
public class BeanConfiguration {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}接下来就是改造调用代码,我们不再直接写固定地址,而是写成服务的名称,这个名称就是我们注册到Eureka中的明称,是属性文件中的spring.application.name,代码如下:
@RestController
@RequestMapping("/substitution")
public class SubstitutionController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/callHello")
public String callHello() {
return restTemplate.getForObject("http://fsh-house/house/hello", String.class);
}
}5.开启Eureka认证注册中心有公网IP的话,加上权限认证来保证安全性。
改造我们的注册中心,通过集成Spring-Security来进行安全认证。在pom中添加Spring-Security的依赖,然后在配置文件中加上认证的配置信息:
#是否开启基本的鉴权,默认为true,不想要密码就设置为false security.basic.enabled=false security.user.name=xuchao security.user.password=123abc
注意:
不添加security的jar包,就不需要密码;
添加了,不设置用户名密码,用户名默认:user 密码:默认产生的随机密码 (一般默认用户名有admin,root,user,guest)
添加后,就是自己的,注意用户名密码后面可以有空格,不小心打了空格一定要检查,确保输入正确。
在Eureka开启认证后,客户端注册的配置也要加上认证的用户名和密码信息,如:
eureka.client.service-url.defaul-zone=http://用户名:密码@localhost:8761/eureka
来源:https://www.cnblogs.com/xc-xinxue/p/12448570.html