共计 14169 个字符,预计需要花费 36 分钟才能阅读完成。
目录构造
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
*/@Data
public 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
*/
@RestController
public 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: 8000
spring:
application:
## 服务别名 -- 服务注册到 Eureka 名称
name: app-member
eureka:
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
@SpringBootApplication
public 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: 8200
spring:
application:
## 服务别名 -- 服务注册到 Eureka 名称
name: app-order
eureka:
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
*/
@RestController
public 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
@EnableFeignClients
public 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: 8100
spring:
application:
##Eureka 集群应用,名称必须统一
name: baba-eureka
eureka:
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
@SpringBootApplication
public 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 一样的成果: