首先创建一个maven项目,为Eureka注册中心项目
依赖引入
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-parent</artifactId> <version>2.0.3.RELEASE</version> </parent> <!-- 管理依赖 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.RELEASE</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> <!-- jaxb模块引用 - start --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> <!-- jaxb模块引用 - end --> </dependencies> <!-- 注意: 这里必须要添加, 否者各种依赖有问题 --> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>repository.springframework.maven.release</id> <name>Spring Framework Maven Release Repository</name> <url>http://maven.springframework.org/milestone/</url> </repository> <repository> <id>org.springframework</id> <url> http://maven.springframework.org/snapshot</url> </repository> <repository> <id>spring-milestone</id> <name>Spring Maven MILESTONE Repository</name> <url>http://repo.spring.io/libs-milestone</url> </repository> <repository> <id>spring-release</id> <name>Spring Maven RELEASE Repository</name> <url>http://repo.spring.io/libs-release</url> </repository> </repositories> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11.0</maven.compiler.source> <maven.compiler.target>11.0</maven.compiler.target> </properties>
启动类
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class Eureka_app { public static void main(String[] args) { SpringApplication.run(Eureka_app.class, args); } }
application.yml配置文件
#服务端口号 server: port: 8100 spring: application: name: eureka-server eureka: instance: #注册中心ip hostname: 127.0.0.1 client: serviceUrl: #注册地址 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #是否需要把吧本项目注册到注册中心 register-with-eureka: false #因为自己是注册中心 所以不需要检索服务 fetch-registry: false #测试时关闭自我保护机制 server: enable-self-preservation: false #剔除失效服务间隔 eviction-interval-timer-in-ms: 2000
创建一个maven project ,packaging选择pom,名为Springcloud-vhukze-parent。
在此项目下新建一个maven model,packaging选择pom,名为Springcloud-vhukze-api-service。
在Springcloud-vhukze-api-service下创建一个maven model,packaging选择jar,名为springcloud-vhukze-api-member-service。
在Springcloud-vhukze-api-service下创建一个maven model,packaging选择jar,名为springcloud-vhukze-api-order-service。
在Springcloud-vhukze-parent下创建一个maven model,packaging选择jar,名为springcloud-vhukze-member-service-impl,是springcloud-vhukze-api-member-service的实现项目。
在Springcloud-vhukze-parent下创建一个maven model,packaging选择jar,名为springcloud-vhukze-order-service-impl,是springcloud-vhukze-api-order-service的实现项目。
在父项目parent中引入依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> </parent> <!-- 管理依赖 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- SpringBoot整合Web组件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- SpringBoot整合eureka客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- SpringBoot整合fegnin客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</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>
在springcloud-vhukze-api-member-service中创建如下两个类
实体类两个属性,name age 加getset方法重写toString。
IMemberService类
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import com.vhukze.api.entity.UserEntity; public interface IMemberService { @RequestMapping("getMember") public UserEntity getMember(@RequestParam("name") String name); }
在springcloud-vhukze-member-service-impl引入springcloud-vhukze-api-member-service依赖
<dependencies> <dependency> <groupId>com.vhukze</groupId> <artifactId>springcloud-vhukze-api-member-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
并创建如下两个类
启动类MemberApp
@SpringBootApplication @ComponentScan(basePackages = "com.vhukze") @EnableEurekaClient @EnableFeignClients public class MemberApp { public static void main(String[] args) { SpringApplication.run(MemberApp.class, args); } }
接口实现类MemberServiceImpl
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.vhukze.api.entity.UserEntity; import com.vhukze.api.service.IMemberService; @RestController public class MemberServiceImpl implements IMemberService{ @RequestMapping("/getMember") public UserEntity getMember(String name) { // TODO Auto-generated method stub UserEntity user = new UserEntity(); user.setName(name); user.setAge(19); return user; } }
application.yml配置文件
###服务启动端口号 server: port: 8000 ###服务名称(服务注册到eureka名称) spring: application: name: app-vhuze-member ###服务注册到eureka地址 eureka: client: service-url: defaultZone: http://localhost:8100/eureka ###因为该应用为注册中心,不会注册自己 register-with-eureka: true ###是否需要从eureka上获取注册信息 fetch-registry: true
在springcloud-vhukze-api-order-service创建如下类
import org.springframework.web.bind.annotation.RequestMapping; public interface IOrderService { @RequestMapping("toMember") public String toMember(String name); } 在springcloud-vhukze-order-service-impl中引入springcloud-vhukze-api-order-service和springcloud-vhukze-api-member-service依赖 <dependencies> <dependency> <groupId>com.vhukze</groupId> <artifactId>springcloud-vhukze-api-order-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.vhukze</groupId> <artifactId>springcloud-vhukze-api-member-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> 并创建如下类 启动类OrderApp import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @ComponentScan(basePackages = "com.vhukze") @EnableEurekaClient @EnableFeignClients(basePackages = "com.vhukze.order") public class OrderApp { public static void main(String[] args) { SpringApplication.run(OrderApp.class, args); } } 接口实现类OrderServiceImpl import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.vhukze.api.entity.UserEntity; @RestController public class OrderServiceImpl implements IOrderService{ @Autowired private MemberServiceFeign feign; @RequestMapping("toMember") public String toMember(String name) { // TODO Auto-generated method stub UserEntity user = feign.getMember(name); return user.toString(); } } feign客户端接口 import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import com.vhukze.api.service.IMemberService; @FeignClient("app-vhuze-member") @Component public interface MemberServiceFeign extends IMemberService{ } 只需继承IMemberService接口即可。 application.yml配置文件 ###服务启动端口号 server: port: 8020 ###服务名称(服务注册到eureka名称) spring: application: name: app-vhuze-order ###服务注册到eureka地址 eureka: client: service-url: defaultZone: http://localhost:8100/eureka ###因为该应用为注册中心,不会注册自己 register-with-eureka: true ###是否需要从eureka上获取注册信息 fetch-registry: true
启动Eureka注册中心
启动OrderApp和MemberApp
访问http://localhost:8020/toMember?name=22