道真县城乡建设局网站/苏州网站制作开发公司
Feign
实现接口与接口之间的调用
Swagger
自动生成接口文档
Zuul
一种网关,实现地址转发和路由
实现
-
项目结构
whotw-springcloud 【project 】
——whotw-basics 【module pom】
————whotw-basics-eureka 【module jar】
————whotw-basics-zuul 【module jar】
——whotw-service-api【module pom】
————whotw-service-api-member【module jar】
————whotw-service-api-order【module jar】
——whotw-service-impl【module pom】
————whotw-service-impl-member【module jar】
————whotw-service-impl-order【module jar】 -
注意
每个项目的代码必须在建立的包中最好在com.whotw包下
启动类 (MemberApp,OrderApp,EurekaApp…)在src.java包下
-
依赖和yml
whotw-springcloud根项目的依赖Eureka (Eureka原理和使用)
<dependencies><!--SpringCloud eureka-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>###服务端口号server:port: 13730###eureka 基本信息配置eureka:instance:###注册到eurekaip地址hostname: 127.0.0.1client:service-url:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/###因为自己是为注册中心,不需要自己注册自己register-with-eureka: false###因为自己是为注册中心,不需要检索服务fetch-registry: false
Zuul
<dependencies><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-netflix-zuul</artifactId></dependency><!--集成swagger--自动生成文档--><dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId><version>1.7.0.RELEASE</version></dependency></dependencies> ############common define#################eureka-port: 13730eureka-host: localhost############common define#################server:#App's portport: 11710spring:application:#App's namename: whotw-zuul###服务注册到eureka地址eureka:client:service-url:defaultZone: http://${eureka-host}:${eureka-port}/eureka###zuul网关实现反向代理zuul:#URL路由routes:api-a:#访问微信接口路径path: /whotw-order/**#服务名serviceId: whotw-orderapi-b:path: /whotw-member/**serviceId: whotw-member
api
<dependencies><!--集成swagger--自动生成文档--><dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId><version>1.7.0.RELEASE</version></dependency></dependencies>
impl
<dependencies><!-- springcloud feign组件 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies>
impl-member
<dependencies><dependency><groupId>whotw-springcloud</groupId><artifactId>whotw-service-api-member</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>############common define#################eureka-port: 13730eureka-host: localhost############common define#################server:#App's portport: 8081spring:application:#App's namename: whotw-member###服务注册到eureka地址eureka:client:service-url:defaultZone: http://${eureka-host}:${eureka-port}/eureka####swagger相关配置swagger:enabled: truetitle: 会员服务接口APIdescription: member apibase-package: com.whotwbase-path: /**#exclude-path: /errorversion: @project.version@contanct:name: lqemail: 442232278@qq.com
impl-order
<dependencies><dependency><groupId>whotw-springcloud</groupId><artifactId>whotw-service-api-member</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>whotw-springcloud</groupId><artifactId>whotw-service-api-order</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>############common define#################eureka-port: 13730eureka-host: localhost############common define#################server:#App's portport: 8082spring:application:#App's namename: whotw-order###服务注册到eureka地址eureka:client:service-url:defaultZone: http://${eureka-host}:${eureka-port}/eureka####swagger相关配置swagger:enabled: truetitle: 订单服务接口APIdescription: order apibase-package: com.whotwbase-path: /**#exclude-path: /errorversion: @project.version@contanct:name: lqemail: 442232278@qq.com
-
代码
Eureka@SpringBootApplication@EnableEurekaServerpublic class EurekaApp {public static void main(String[] args) {SpringApplication.run(EurekaApp.class, args);}}
Zuul
@SpringBootApplication@EnableSwagger2Doc@EnableZuulProxy@EnableEurekaClientpublic class ZuulApp {public static void main(String[] args) {SpringApplication.run(ZuulApp.class, args);}@Component@Primaryclass DocumentationConfig implements SwaggerResourcesProvider {@Overridepublic List<SwaggerResource> get() {List resources = new ArrayList<>();// 服务名称/v2/api-docsresources.add(swaggerResource("订单服务api", "/whotw-order/v2/api-docs", "2.0"));resources.add(swaggerResource("会员服务api", "/whotw-member/v2/api-docs", "2.0"));return resources;}private SwaggerResource swaggerResource(String name, String location, String version) {SwaggerResource swaggerResource = new SwaggerResource();swaggerResource.setName(name);swaggerResource.setLocation(location);swaggerResource.setSwaggerVersion(version);return swaggerResource;}}}
api-member
@ApiModel("会员实体")@Datapublic class MemberEntity {@ApiModelProperty(value = "会员名称")private String name;}@Api(tags = "会员服务接口")public interface MemberService {/*** 获取微信AppEntity** @return*/@ApiOperation(value = "获取会员")@GetMapping("/getMember")public MemberEntity getMember(@RequestParam("userId") String userId);}
api-order
@Api(tags = "订单服务接口")public interface OrderService {/*** 会员调用微信** @return* @ApiOperation @Api @*/@ApiOperation(value = "订单调用会员接口")@GetMapping("/orderCallMember")public MemberEntity orderCallMember(@RequestParam("userId") String userId);}
impl-member
@RestControllerpublic class MemberServiceImpl implements MemberService {@Overridepublic MemberEntity getMember(String userId) {MemberEntity memberEntity = new MemberEntity();memberEntity.setName(userId);return memberEntity;}}@SpringBootApplication@EnableEurekaClient@ComponentScan(value = "com.whotw")@EnableSwagger2Docpublic class MemberApp {public static void main(String[] args) {SpringApplication.run(MemberApp.class, args);}}
impl-order
@FeignClient("whotw-member")public interface MemberFeign extends MemberService {}@RestControllerpublic class OrderServiceImpl implements OrderService {@Autowiredprivate MemberFeign memberFeign;@Overridepublic MemberEntity orderCallMember(String userId) {MemberEntity member = memberFeign.getMember(userId);System.out.println("this is orderServiceImpl");System.out.println("会员名称" + member.getName());member.setName("调用会员成功!");return member;}}@SpringBootApplication@EnableEurekaClient@EnableSwagger2Doc@EnableFeignClientspublic class OrderApp {public static void main(String[] args) {SpringApplication.run(OrderApp.class, args);}}
-
测试
先启动Eureka在启动其他服务
Eureka
http://localhost:13730/
Zuul 直接在zuul上测试即可,zuul包含member和order
http://localhost:11710/swagger-ui.html
选择一个服务接口member
http://localhost:8081/swagger-ui.html
order
http://localhost:8082/swagger-ui.html