学科分类
目录
Docker

微服务项目功能介绍

上一小节已经对商城管理项目的结构进行了简单介绍,但具体的配置细节和功能还没有讲解,本节将针对这些子项目的配置和功能作进一步的说明。

1.microservice-eureka-server(Eureka注册中心)

​ 该子项目使用了Spring Cloud的组件Eureka,主要用于搭建一个服务注册中心, microservice-gateway-zuul、microservice-orderservice和microservice-userservice都将通过配置注册到该注册中心。

​ 其对应的配置文件application.yml的具体内容,如文件1所示。

文件1 application.yml

 1  spring:
 2    application:
 3      name: eureka-server # 指定应用名称
 4  server:
 5   port: 8761
 6  eureka:
 7   client:
 8    register-with-eureka: false
 9    fetch-registry: false
 10   service-url:
 11    defaultZone: http://localhost:${server.port}/eureka/
 12 #   上线测试需要使用以下配置,eureka-server表示对应的服务名称
 13 #    defaultZone: http://eureka-server:${server.port}/eureka/

在文件1中,配置了应用名称和服务端口,同时通过Eureka的相关配置指定了Eureka注册中心的地址为http://localhost:${server.port}/eureka/(即http://localhost:8761/eureka/),当部署到测试或线上环境时,需要根据上面注释中的提示信息进行地址更改。

2.microservice-gateway-zuul(Zuul API网关)

​ 该子项目使用了Spring Cloud的组件Zuul,主要作为其他微服务项目的API网关,来实现其他微服务接口的动态代理。microservice-orderservice和microservice-userservice微服务都可以使用Zuul网关服务进行代理请求。

​ 其对应的配置文件application.yml的具体内容,如文件2所示。

文件2 application.yml

 1  spring:
 2   application:
 3    name: gateway-zuul # 指定应用名称
 4  server:
 5   port: 8050
 6  eureka:
 7   client:
 8    #配置Eureka注册中心地址
 9    serviceUrl:
 10    defaultZone: http://localhost:8761/eureka/
 11 #   上线测试需要使用以下配置
 12 #   defaultZone: http://eureka-server:8761/eureka/
 13 zuul:
 14  ignoredServices: '\*'
 15  routes:
 16   user-service:
 17    path: /user-service/\**
 18    serviceId: user-service
 19   order-service:
 20     path: /order-service/**
 21     serviceId: order-service

在文件2中,同样先配置了应用名称和服务端口,同时通过Eureka的相关配置将该API网关服务注册到了Eureka注册中心(这里需要注意当部署到测试或线上环境时,需要根据上面注释中的提示信息进行注册地址修改)。最后部分实现了Zuul的相关配置,分别配置了serviceId为user-service和order-service的两个应用的路径映射。

3.microservice-orderservice(订单管理微服务)

​ 该子项目就是一个使用传统的Spring Boot框架开发的订单管理微服务项目,主要用于进行商城订单管理,并提供有关订单管理的RESTFUL风格的API接口方法。

​ 其对应的配置文件application.yml的具体内容,如文件3所示。

文件3 application.yml

 1  # 数据库配置
 2  spring:
 3   datasource:
 4    driver-class-name: com.mysql.jdbc.Driver
 5    url: jdbc:mysql://localhost:3306/microservice_mallmanagement
 6  #  与Docker整合时可使用以下配置(也可以使用具体的IP+端口)
 7  #  url: jdbc:mysql://mysql:3306/microservice_mallmanagement
 8    username: root
 9    password: root
 10  application:
 11    name: order-service # 指定应用名称
 12 server:
 13  port: 7900 # 指定该Eureka实例的端口号
 14 eureka:
 15  client:
 16   #配置Eureka注册中心地址
 17   service-url:
 18    defaultZone: http://localhost:8761/eureka/ 
 19 #   上线测试需要使用以下配置
 20 #    defaultZone: http://eureka-server:8761/eureka/

在文件3中,除配置了服务的应用名称、端口以及Eureka注册中心外,还额外增加了MySQL数据库的配置。微服务项目会根据具体需求配置各自不同的数据库,本书为了方便理解和学习都以MySQL数据库为例。

上述配置文件不仅要注意上线测试时需要修改Eureka注册中心配置,还需要注意MySQL数据库url的配置。如果MySQL数据库使用非Docker容器方式进行配置,那么MySQL数据库的url要修改为“MySQL数据库服务的IP+端口”的形式;如果是使用Docker容器启动的MySQL数据库服务,那么MySQL数据库的url要根据上面的提示修改为“MySQL数据库的服务名称或容器名称+端口号”的形式。

该项目对应的控制器类OrderController的具体内容,如文件4所示。

文件4 OrderController.java

 1  ...
 2  @RestController
 3  @RequestMapping("/order")
 4  public class OrderController {
 5    @Autowired
 6    private OrderMapper orderMapper;
 7    @GetMapping(path="/findOrders/{userid}")
 8    @HystrixCommand(fallbackMethod = "findOrderfallback") //熔断器
 9    public List<Order> findOrder(@PathVariable("userid")Integer userid) {
 10     List<Order> orders= this.orderMapper.selectOrder(userid);
 11     return orders;
 12   }
 13   //针对上面熔断器发现的问题编写回调方法(参数和返回值要一样)
 14   public List<Order> findOrderfallback(Integer userid) {
 15     List<Order> orders =new ArrayList<>();
 16     return orders;
 17   }
 18 }

从文件4可以看出,该订单管理项目的接口控制器类OrderController中只是简单的定义了一个根据userid查询订单集合的方法,同时该方法中还通过@HystrixCommand注解配置了Spring Cloud的熔断器Hystrix,并编写了回调方法。

4.microservice-userservice(用户管理微服务)

​ 该子项目也是一个传统的Spring Boot框架开发的用户管理微服务项目,主要用于进行商城用户管理,并提供有关用户管理的RESTFUL风格的API接口方法。

​ 其对应的配置文件application.yml的具体内容,如文件5所示。

文件5 application.yml

 1  # 数据库配置
 2  spring:
 3   datasource:
 4    driver-class-name: com.mysql.jdbc.Driver
 5    url: jdbc:mysql://localhost:3306/microservice_mallmanagement
 6  #  与Docker整合时可使用以下配置(也可以使用具体的IP+端口)
 7  #  url: jdbc:mysql://mysql:3306/microservice_mallmanagement
 8    username: root
 9    password: root
 10  application:
 11    name: user-service # 指定应用名称
 12 server:
 13  port: 8030 # 指定该Eureka实例的端口号
 14 eureka:
 15  client:
 16   #配置Eureka注册中心地址
 17   service-url:
 18    defaultZone: http://localhost:8761/eureka/ 
 19 #   上线测试需要使用以下配置
 20 #   defaultZone: http://eureka-server:8761/eureka/
 21 #客户端动态访问常量配置
 22 ORDERSERVICEURL: http://order-service/

从文件5可以看出,用户管理微服务的配置和订单管理微服务的配置基本相同。除了服务名称和端口外,只是增加了一个Spring Cloud组件Ribbon提供的客户端负载均衡常量ORDERSERVICEURL的配置(原本是订单服务的IP+端口号)。

该项目对应的控制器类UserController的具体内容,如文件6所示。

文件6 UserController.java

 1  ...
 2  @RestController
 3  @RequestMapping("/user")
 4  public class UserController {
 5    @Autowired
 6    private RestTemplate restTemplate;
 7    @Autowired
 8    private UserMapper userMapper;
 9    @Value("${ORDERSERVICEURL}")
 10   private String ORDERSERVICEURL;
 11   @GetMapping(path="/findOrders/{username}")
 12   public List<Order> getOrderByUsername(@PathVariable("username")
 13                         String username) {
 14      User user = this.userMapper.selectUser(username);
 15      //使用Ribbon后,可以使用http://order-service/而不用使用IP+端口
 16     ResponseEntity<List<Order>> rateResponse =     
 17            restTemplate.exchange(ORDERSERVICEURL
 18           +"/order/findOrders/"+user.getId(),
 19           HttpMethod.GET, null,
 20           new ParameterizedTypeReference<List<Order>>(){});
 21     List<Order> orders = rateResponse.getBody();
 22     return orders;
 23   }
 24 }

从文件6可以看出,UserController中也只是简单的定义了一个根据username查询订单集合的getOrderByUsername()方法。执行方法时,会通过@Value注解使用Ribbon客户端负载均衡的功能引入配置文件中订单微服务的常量值ORDERSERVICEURL,然后在方法中先通过username查询出对应的userid,然后使用RestTemplate的exchange()方法远程调用订单管理微服务接口进行订单集合查询。

文件6中,RestTemplate的exchange()方法用于远程调用其他RESTFUL接口方法,并返回指定的对象集合。其方法的四个参数分别表示请求地址、请求方式、请求参数实体以及返回结果对象。

至此,商城管理系统的整体结构和子项目功能及主要配置就已介绍完毕。

点击此处
隐藏目录