目标
-
创建注册中心。
-
创建客户端注册到注册中心。
-
注册中心加密码。
-
客户端的消费者调用提供者。
重点、难点
1)、重点
创建注册中心、创建客户端的消费者和提供者。
2)、难点
创建客户端的消费者和提供者。
知识点讲解
创建注册中心
1、Spring Cloud概念。
Spring Cloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于Springboot构建。
Spring Cloud的F版本是基于springboot的2.0.x构建,之前的是基于Springboot的1.5.x构建,版本名的来源是伦敦的地铁站名。
https://spring.io/projects/spring-cloud #spring官网地址
Spring Cloud常用的5个模块:
-
服务发现——Netflix Eureka
-
客服端负载均衡——Netflix Ribbon
-
断路器——Netflix Hystrix
-
服务网关——Netflix Zuul
-
分布式配置——Spring Cloud Config
如下图:
2、创建注册中心
创建Spring Cloud工程
设置包名、组织名称
选择Spring Cloud注册中心需要的包。因为使用Spring boot 1.5.6的版本,下图选择了后也需要在pom.xml中更改相对应的版本。后续使用的Spring Cloud版本是Dalston.SR4+Spring boot 1.5.6.RELEASE
3、修改导入jar包
我使用的Spring Cloud版本是Dalston.SR6+Spring boot 2.1.18RELEASE(要注意不同的版本有可能不兼容)
生成的pom.xml文件如下:
<?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>
<groupId>com.xshiedu</groupId>
<artifactId>dmw-user-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dmw-user-consumer</name>
<description>dmw-user-consumer</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.1.18.RELEASE</spring-boot.version>
<spring-cloud.version>Greenwich.SR6</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.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
<configuration>
<mainClass>com.xshiedu.DmwUserConsumerApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
4、注册中心启动配置
启动类上加@EnableEurekaServer注解
示例如下
@SpringBootApplication
@EnableEurekaServer
public class ShopDiscoveryEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(ShopDiscoveryEurekaApplication.class, args);
}
}
5、配置application.yml文件
在resources目录下的application.yml文件配置如下:
server:
port: 7776 #注册中心使用的端口号
eureka:
client:
#表示是否将自己注册在EurekaServer上,默认为true。当前应用就是EurekaServer,置为false
register-with-eureka: false
#表示表示是否从EurekaServer获取注册信息,默认为true。单节点不需要同步其他的EurekaServer节点的数据
fetch-registry: false
service-url:
defaultZone: http://172.16.2.1:7776/eureka/ #设置Eureka的地址
6、启动注册中心并访问
http://172.16.2.1:7776
访问后显示如下图
创建客户端注册到注册中心
1、创建客户端工程
设置组织名称、包名等
设置要导入的jar包
2、修改导入jar包
修改pom.xml如下:
Spring Boot版本改成:2.1.18.RELEASE
Spring Cloud版本改成:Dalston.SR6
Spring Cloud客户端的包定位改成:spring-cloud-starter-eureka
3、客户端启动配置
启动类上加@EnableDiscoveryClient注解
示例如下:
@EnableDiscoveryClient //此处客户端注解
@SpringBootApplication
public class DmUserProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DmUserProviderApplication.class, args);
}
}
4、配置application.yml文件
在resources目录下的application.yml文件配置如下
server:
port: 7101 #客户端 访问的端口号
spring:
application:
name: dm-user-provider #客户端应用程序名称
eureka:
client:
service-url:
defaultZone: http://172.16.2.1:7776/eureka/ #注册中心地址
5、启动提供者客户端
访问http://172.16.2.1:7776 注册中心,显示客户端如下,表示注册成功。
6、注意
1、如果Spring Cloud 是Greenwich版本导入web的包。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
注册中心加密码
1、访问注册中心
访问http://172.16.2.1:7776 可以看到并不需要密码就可以登录。如需要加上用户名和密码登录则要配置
2、配置注册中心
注册中心需要导入security的jar包,打开pom.xml增加此包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
3、修改application.yml文件
配置属性如下:
security.user.name 用户名
security.user.password 密码
security.basic.enabled 启用密码登录
eureka.client.service-url.defaultZone 设置登录的用户名和密码
示例如下:
server:
port: 7776
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://root:dmw@172.16.2.1:7776/eureka/ #设置登录的用户名和密码
security:
user:
name: root #设置登录用户名
password: dmw #设置登录密码
basic:
enabled: true #启用
4、修改dm-user-provider客户端提供者application.yml文件
修改defaultZone值,如下图:
server:
port: 7101
spring:
application:
name: dm-user-provider
eureka:
client:
service-url:
defaultZone: http://root:dmw@172.16.2.1:7776/eureka/ #注册中心地址 加上用户名和密码
5、注意
1、如果Spring Cloud 是Greenwich版本application.yml配置如下:
server:
port: 7776
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://root:dmw@172.16.2.1:7776/eureka/ #设置登录的用户名和密码
spring:
security:
user:
name: root #设置登录用户名
password: dmw #设置登录密码
增加配置类(作用是忽略掉有eureka的路径访问)
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//忽略eureka路径
http.csrf().ignoringAntMatchers("/eureka/**");
super.configure(http);
}
}
客户端的消费者调用提供者
1、使用客户端的消费者调用提供者
如下图:
客户端是有多个的,分为二类,一类是提供者,一类是消费者。接下来带大家演示Consumer服务怎么调用Provider服务。前面我们已经创建了Provider服务,接下来我们先让Provider提供一个可调用的方法出来,再继续创建一个Consumer服务。通过Consumer去调用Provider提供出来的方法。
2、修改Provider服务
先让我们的提供者dm-user-provider提供一个无参的可调用方法。新建UserController类。
package com.dm.controller;
//导包省略
@RestController
public class UserController {
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String login() throws Exception{
return " 提供者1 登录成功 " ;
}
}
3、创建Consumer服务
创建此工程和Provider服务基本一样,它们二个都是客户端。只不过一个是调用者,一个是提供者。
设置组织名称、包名等
设置要导入的jar包
4、修改导入jar包
修改pom.xml如下:
Spring Boot版本改成:2.1.8.RELEASE
Spring Cloud版本改成:Dalston.SR6
Spring Cloud客户端的包定位改成:spring-cloud-starter-eureka
增加feign包:spring-cloud-starter-feign
5、客户端启动配置
启动类上加@EnableDiscoveryClient注解
示例如下:
@EnableDiscoveryClient //此处客户端注解
@EnableFeignClients
@SpringBootApplication
public class DmUserConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DmUserConsumerApplication.class, args);
}
}
6、配置application.yml文件
server:
port: 7501 #客户端访问的端口号 此处和提供者不一样
spring:
application:
name: dm-user-comsumer #客户端应用程序名称
eureka:
client:
service-url:
defaultZone: http://root:dmw@172.16.2.1:7776/eureka/ #注册中心地址
7、通过feign接口调用
创建feign接口,使用@FeignClient注解
@FeignClient(name="dm-user-provider") //此处名字写提供者的spring.application.name值
public interface UserFeignClient {
//此处和提供者中的控制器定义一样
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String login() throw Exception;
}
8、创建控制器类
@RestController
public class UserController{
@Resource
private UserFeignClient userFeignClient;
@RequestMapping("/userLogin")
public String login() throw Exception{
return "收到结果:"+userFeignClient.login();
}
}
9.启动类测试
输出结果如下,表示消费者调用提供者成功。
收到结果: 提供者1 登录成功
10、注意
1、如果Spring Cloud 是Greenwich版本导入web的包。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2、feign是openfeign的包 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>