一 创建父工程
- 父工程的创建:新建springBoot项目
勾选web依赖
- 修改pom文件的
packaging
属性为pom
:<packaging>pom</packaging>
二 创建注册中心
2.1 创建SpringBoot
在父工程项目名上 右键 --> new --> module 中新建SpringBoot项目
勾选项:web依赖、Eureka Server
2.2 修改pom文件
更改父工程依赖<parent>
为我们所建的父工程
2.3 配置启动类
在启动类上添加注解@EnableEurekaServer
2.4 配置yml文件
server:
port: 8761 #Eureka默认端口号8761
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false #当前项目不注册
fetch-registry: false #当前项目不需要发现服务
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
2.5 启动eureka的启动类
启动成功后,访问http://localhost:8761/
,出现以下界面,成功!
三 搭建服务提供者
一整套代码:数据库操作、实现业务逻辑、提供对外接口
3.1 创建SpringBoot项目
同 2.1 创建方法,勾选以下内容:
3.2 修改pom文件
同2.2 修改parent
3.3 配置启动类
在启动类上添加注解@EnableDiscoveryClient
3.4 配置yml文件
server:
port: 8801
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/ #对应注册中心配置中的defaultZone
spring:
application:
name: HelloProvider #名字随意,一般为类名,显示在注册中心,找提供服务者时,需要喊的名字
3.5 编写代码
实际上,我们需要在提供者中编写三层架构+webMVC
此处作为演示,只写了controller层!
添加Controller层
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/provider/hello/first.do")
public String first() {
System.out.println("这是第一个用于测试的user服务提供者打印的内容:"+System.currentTimeMillis());
return "测试成功,现在你看到的是测试user的提供者返回的数据";
}
}
3.6 启动服务
运行 2.5 内容,在注册中心中出现如下内容:
表示成功加入注册中心!接下来需要构建一个服务消费者试一下提供者的接口。
4 服务消费者
服务消费者只需要调用服务提供者,需要配置Swagger 实现跨域
实现服务消费者有两种方式:
- Feign
feign时一种声明式、模板化的HTTP客户端 - 基于Ribbon + RestTemplate
提供云端负载均衡
4.1 基于Feign创建服务消费者
4.1.1 创建SpringBoot项目
勾选如下选项:
4.1.2 修改pom文件
同2.2 修改parent
4.1.3 配置启动类
在启动类上添加注解
@EnableDiscoveryClient
用于注册并发现服务
@EnableFeignClients
利用Feign进行服务消费
4.1.4 编写代码
- 编写业务逻辑层 service(对内,对提供者)
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
//这里的名字haogo_userprovider对应需要的提供者的配置文件中的name
@FeignClient("haogo_userprovider")
public interface HelloService {
//对应所选的服务提供者的controller层中需要的方法的@,完全一致
@GetMapping("/provider/hello/first.do")
String hello();
}
- 编写对外的controller层(对外,对人)
import com.lanc.app.haogo_userconsumer_feign.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
private HelloService helloService;
//这个是用于外部调用的
@GetMapping("api/hello/first.do")
public String hello() {
return helloService.hello();
}
}
4.1.5 添加Swagger2
参考我另一篇博客:Swagger2的使用
4.1.6 启动服务
发现此时注册中心多了刚才创建的消费者!成功!
4.1.7 测试
Api的端口我们定义的时8901,通过它访问swagger:
http://localhost:8901/swagger-ui.html
并测试接口
从提供者拿到结果,完成!
4.2 基于Ribbon + RestTemplate的服务消费者
暂留白
遇到的错误
- 在启动时报错
原因,在配置yml
文件中的name
时,使用了下划线,虽然提供者正常启动了,但是在使用feign
时,从service
层调用name
时,就不行!
**解决方法:**名字中不能出现下划线,可以使用 -