Springcloud项目是由多个SpringBoot项目组成,创建一个分布式的项目,首先先创建一个存放SpringBoot项目的容器。
在设置里面配置一下maven
把项目里面多余的东西删掉,留个空壳。
配置完成之后,再在里面选择创建一个子工程
可以选择快速创建一个springboot项目,项目的名称就叫做eureka,充当注册中心的功能。
创建完成之后,子工程的项目结构,多余的文件删除
eureka的pom文件中引入eureka的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
在eureka的启动类上加上eureka的启动注解
并且在配置文件中加上项目的基本信息,因为分布式项目可能会有多个注册中心,所以我们在这里创建的注册中心也需要把自己注册进去。
server:
port: 8848
spring:
application:
name: eurekaService
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8848/eureka
项目启动成功之后,
登录进来就能看到eureka的界面,
服务名称eurekaService,
地址前的up表示当前组件现在的状态为正常。
再创建一个子工程,userService来充当eurekaClient。
创建完成之后,导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置yml
server:
port: 8081
spring:
application:
name: userService
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8848/eureka
启动userService之后,查看eureka页面可以看到注册进来的服务
微服务之间的互相调用,是通过feign组件来实现的。
我们再创建一个order订单服务,来模拟一下服务的调用。
创建配置过程与创建用户服务一样。
1、创建一个conrtoller,随便填点数据。
@RestController
@RequestMapping(value = "/order")
public class OrderController {
@RequestMapping(value = "/getOrderInfo")
public Map<String, Object> getOrderInfo(){
Map<String, Object> result = new HashMap<>();
result.put("code", "0");
result.put("msg", "请求成功");
result.put("data", null);
return result;
}
}
2、再返回到userService的pom中加入feign的依赖,创建feign远程服务调用代码,调用订单服务获取数据。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@FeignClient 中填订单服务的名称,
下面的请求路径,为订单服务控制器里面的路径
@FeignClient(value = "orderService")
public interface OrderFegin {
@RequestMapping(value = "/order/getOrderInfo")
Map<String, Object> getOrderInfo();
}
3、在userService的controller中调用feign获取数据
@RestController
@RequestMapping(value = "/user")
public class UserController {
@Resource
private OrderFegin orderFegin;
@RequestMapping(value = "/getUserOrderInfo")
public Map<String, Object> getUserOrderInfo(){
Map<String, Object> result = orderFegin.getOrderInfo();
return result;
}
@RequestMapping(value = "/hello")
public String getHello(){
return "请求成功!";
}
}
4、启动类上面加上Feign的注解
重新启动两个服务之后,可以看到三个应用的状态都启着。
在浏览器中访问 userService的服务 http://localhost:8081/user/getUserOrderInfo
可以看到成功的返回了数据
在代码中并没有直接通过orderService的地址来调用方法,这就是项目中feign的作用。