目录构造

springcloud-parents 父工程(pom)
----springcloud-eureka-server Eureka Service
----springcloud-parent 父模块(pom)
--------springcloud-api-service 接口 (pom)
------------springcloud-api-member-service 接口 (jar)
------------springcloud-api-order-service 接口 (jar)
--------springcloud-api-member-service-impl 会员接口实现 (pom)
--------springcloud-api-order-service-impl 订单接口实现(pom)

模块代码

springcloud-parents父工程

构建 spring initializr 工程习惯把开发工具和web加进来了哈:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <modules> <module>springcloud-eureka-server</module> <module>springcloud-parent</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.baba.wlb</groupId> <artifactId>springcloud-parents</artifactId> <version>1.0-SNAPSHOT</version> <name>springcloud-parents</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build></project>

springcloud-parent

pom文件:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud-parents</artifactId> <groupId>com.baba.wlb</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-parent</artifactId> <packaging>pom</packaging> <modules> <module>springcloud-api-service</module> <module>springcloud-api-order-service-impl</module> <module>springcloud-api-member-service-impl</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.M7</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!--SpringCloud Eureka 客户端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!--springcloud 整合openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> </dependencies> <!--留神:这里必须增加,否则各种依赖有问题--> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/libs-milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories></project>

springcloud-api-service

pom文件:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud-parent</artifactId> <groupId>com.baba.wlb</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-api-service</artifactId> <packaging>pom</packaging> <modules> <module>springcloud-api-member-service</module> <module>springcloud-api-order-service</module> </modules></project>

springcloud-api-member-service

  • pom依赖:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud-api-service</artifactId> <groupId>com.baba.wlb</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-api-member-service</artifactId> <packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build></project>
  • IMemberService 接口
package com.baba.api.service;import com.baba.api.entity.UserEntity;import org.springframework.web.bind.annotation.RequestMapping;/** * @Author wulongbo * @Date 2021/1/22 11:34 * @Version 1.0 */public interface IMemberService {    // 实体类和定义的接口信息寄存在接口我的项目 // 代码实现寄存在接口实现类外面 @RequestMapping("/getMember")    UserEntity getMember(String name);}
  • 实体类 UserEntity:
package com.baba.api.entity;import lombok.Data;/** * @Author wulongbo * @Date 2021/1/22 11:41 * @Version 1.0 */@Datapublic class UserEntity {    private String name; private String password;}

springcloud-api-order-service

  • pom依赖:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud-api-service</artifactId> <groupId>com.baba.wlb</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-api-order-service</artifactId> <packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build></project>
  • IOrderService 接口
package com.baba.api.service;import org.springframework.web.bind.annotation.RequestMapping;/** * @Author wulongbo * @Date 2021/1/22 13:46 * @Version 1.0 */public interface IOrderService {    // 订单服务调用会员服务接口 feign @RequestMapping("/getOrderByMember")    String getOrderByMember(String name);}

springcloud-api-member-service-impl

  • pom依赖:依赖 springcloud-api-member-service 模块
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud-parent</artifactId> <groupId>com.baba.wlb</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-api-member-service-impl</artifactId> <dependencies> <dependency> <groupId>com.baba.wlb</groupId> <artifactId>springcloud-api-member-service</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies></project>
  • MemberServiceImpl 现类:实现 IMemberService
package com.baba.api.service.impl;import com.baba.api.entity.UserEntity;import com.baba.api.service.IMemberService;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @Author wulongbo * @Date 2021/1/22 11:43 * @Version 1.0 */@RestControllerpublic class MemberServiceImpl implements IMemberService {    @Override @RequestMapping("/getMember")    public UserEntity getMember(String name) {        UserEntity userEntity=new UserEntity(); userEntity.setName(name); userEntity.setPassword("123456"); return userEntity; }}
  • application.yml 配置文件:做了Eureka 集群
##服务端口号server:  port: 8000spring:  application:    ##服务别名--服务注册到Eureka名称 name: app-membereureka:  client:    service-url:      ##以后服务注册到Eureka服务地址 defaultZone: http://localhost:8100/eureka,http://localhost:9100/eureka    register-with-eureka: true ## 须要检索服务信息 fetch-registry: true
  • AppMember 启动类:启用EurekaClient 和 FeignClients
package com.baba.api.service.impl;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.cloud.openfeign.EnableFeignClients;/** * @Author wulongbo * @Date 2021/1/9 15:22 * @Version 1.0 */@EnableEurekaClient@EnableFeignClients@SpringBootApplicationpublic class AppMember {    public static void main(String[] args) {        SpringApplication.run(AppMember.class,args); }}

springcloud-api-order-service-impl

  • pom依赖:依赖 springcloud-api-order-service 模块 和 springcloud-api-member-service模块
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud-parent</artifactId> <groupId>com.baba.wlb</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-api-order-service-impl</artifactId> <dependencies> <dependency> <groupId>com.baba.wlb</groupId> <artifactId>springcloud-api-order-service</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> <!--引入会员接口我的项目--> <dependency> <groupId>com.baba.wlb</groupId> <artifactId>springcloud-api-member-service</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies></project>
  • application.yml 配置文件:做了Eureka 集群
##服务端口号server:  port: 8200spring:  application:    ##服务别名--服务注册到Eureka名称 name: app-ordereureka:  client:    service-url:      ##以后服务注册到Eureka服务地址 defaultZone: http://localhost:8100/eureka,http://localhost:9100/eureka    register-with-eureka: true ## 须要检索服务信息 fetch-registry: true ##心跳检测与续约工夫 ##测试的时候将值设置小一些,保障服务敞开后注册核心能及时剔除服务 instance:    ##Eureka客户端向服务端发送心跳的工夫距离,单位为秒(客户端会通知服务端会依照该规定) lease-renewal-interval-in-seconds: 1 ##Eureka服务端在收到最初一次心跳之后期待的工夫下限,单位为秒,超过则剔除(客户端会通知服务端会依照该规定) lease-expiration-duration-in-seconds: 2
  • Feign Service调用:继承 IMemberService,注入provide别名
package com.baba.api.feign;import com.baba.api.service.IMemberService;import org.springframework.cloud.openfeign.FeignClient;/** * @Author wulongbo * @Date 2021/1/22 14:12 * @Version 1.0 */@FeignClient(name = "app-member")public interface MemberServiceFeign extends IMemberService{}
  • OrderServiceImpl实现类:IOrderService的实现,注入Feign
package com.baba.api.service.impl;import com.baba.api.entity.UserEntity;import com.baba.api.feign.MemberServiceFeign;import com.baba.api.service.IOrderService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @Author wulongbo * @Date 2021/1/22 13:51 * @Version 1.0 */@RestControllerpublic class OrderServiceImpl implements IOrderService {    //订单服务集成会员服务接口,用来实现feign 客户端 缩小接口反复代码 @Autowired private MemberServiceFeign memberServiceFeign; @Override @RequestMapping("/getOrderByMember")    public String getOrderByMember(String name) {        UserEntity userEntity = memberServiceFeign.getMember(name); return userEntity == null ? "没有找到用户信息!" : userEntity.toString(); }}
  • AppOrder启动类:启用EurekaClient 和 FeignClients
package com.baba.api;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;import org.springframework.cloud.openfeign.EnableFeignClients;/** * @Author wulongbo * @Date 2021/1/9 15:39 * @Version 1.0 */@SpringBootApplication@EnableEurekaClient@EnableFeignClientspublic class AppOrder {    public static void main(String[] args) {        SpringApplication.run(AppOrder.class,args); }}

springcloud-eureka-server

Eureka Server服务

  • pom文件:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>springcloud-parents</artifactId> <groupId>com.baba.wlb</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>springcloud-eureka-server</artifactId> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.M7</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!--SpringCloud Eureka Server--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <!--留神:这里必须增加,否则各种依赖有问题--> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/libs-milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories></project>
  • application.yml 务配置文件:
##服务端口号server:  port: 8100spring:  application:    ##Eureka集群应用,名称必须统一 name: baba-eurekaeureka:  instance:    ##服务注册核心ip地址 hostname: 127.0.0.1  client:    serviceUrl:      ##注册地址#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ defaultZone: http://${eureka.instance.hostname}:9100/eureka/    ##因为本人是注册核心,是否须要本人将本人注册到注册核心(集群的时候为true) register-with-eureka: true ##因为本人是注册核心,不须要去检索服务信息 fetch-registry: true server:    ##测试时敞开自我爱护机制,保障不可用服务及时剔除 enable-self-preservation: false eviction-interval-timer-in-ms: 2000

注:另外一台集群配置省略

  • Eureka 服务启动类:
package wlb;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@EnableEurekaServer@SpringBootApplicationpublic class EurekaServerApplication {    //@EnableEurekaServer 示意开启Eureka服务 开启注册核心 public static void main(String[] args) {        SpringApplication.run(EurekaServerApplication.class, args); }}

测试

启动 Eureka Server(集群)服务,启动Member和order服务。
别离拜访Eureka集群服务:http://localhost:8100/,http://localhost:9100/


能够看到provide服务注册到了默认Eureka上。

调用会员模块:http://localhost:8000/getMember?name=99

调用订单模块,查看是否feign调用到会员模块:http://localhost:8200/getOrderByMember?name=iswulongbo

胜利调用!然而 name 没有胜利入参:

解决方案:入参强制要求,须要在 IMemberService接口 以及 MemberServiceImpl实现类中都退出 @RequestParam("name")注解:


再次拜访:http://localhost:8200/getOrderByMember?name=iswulongbo
入参胜利!

至此实现了和调用 http://localhost:8000/getMember?name=iswulongbo一样的成果: