微服务开发中经常使用的聚合项目配置项目目录结构如下
其中api-service这个聚合项目主要适用于存放开发接口的。
此处的接口主要配置,实现项目中所需要的请求接口,以及实体类,因为当实现类项目调用接口类项目的时候会一同调用接口项目中的实体类进行调用参数配置。
此处是两个实现类的目录结构,此处的实现类主要用于实现接口项目中的接口以及实现服务层的逻辑编写。
注意:实现类项目如果需要调用接口类项目的接口需要配置maven依赖导入自己父组件的依赖信息。
<dependency>
<artifactId>springcloud2-meiszl-api-order-service</artifactId>
<groupId>com.meiszl</groupId>
<version>1.0</version>
</dependency>
此处是在order-service-impl项目中调用对应的order-service接口所配置的maven依赖信息。
此处的groupId是聚合项目的父类groupId,而artifactId则是你所调用的项目的artifactId。
以order-service-impl调用order-service接口为例,
order-service接口项目的maven依赖,
<parent>
<artifactId>springcloud2-meiszl-api-service</artifactId>
<groupId>com.meiszl</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud2-meiszl-api-order-service</artifactId>
order-service-impl项目的依赖信息,
<dependency>
<artifactId>springcloud2-meiszl-api-order-service</artifactId>
<groupId>com.meiszl</groupId>
<version>1.0</version>
</dependency>
聚合项目父类的依赖信息,
<groupId>com.meiszl</groupId>
<artifactId>springcloud2meiszlparent</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
可以看出此处的依赖配置关联。
member-service接口项目主要有两个作用:
1.为member-service-impl接口实现类项目提供实现接口。
2.为order-service-impl接口实现类项目提供对应的Feign接口继承接口。
order-service接口项目主要是为order-service-impl项目提供实现接口。
此处,注意在order-service接口中的feign客户端所继承的接口是member-service的接口,这样做的目的是为了省去feign客户端中的代码编写,去除冗余代码。
member-service接口:
public interface Memberservice {
@RequestMapping("/test")
public String testEurekaClient();
}
member-service-impl的Controller实现接口:
@RestController
public class MemberServiceImpl implements Memberservice {
@Override
@RequestMapping("/getMember")
public String testEurekaClient() {
return "这是会员服务";
}
}
order-service接口:
public interface OrderService {
public String getMember();
}
order-service-impl的Feign客户端实现代码:
@Component
@FeignClient(name = "APP-MEISZL-MEMBER")
public interface OrderService extends Memberservice {
}
order-service-impl的Controller实现代码:
@RestController
public class OrderServiceImpl implements OrderService{
@Autowired
private OrderService orderService;
@RequestMapping("/feignMember")
public String testEurekaClient(){
System.out.println("feign调用member");
return orderService.testEurekaClient();
}
}
Feign客户端必须写在接口调用的项目中,目的是为了之后做服务降级以及服务熔断,如果写在注册接口中会导致服务降级与服务熔断不能实现。