1.parent的pom配置
备注:有一个common-user的模块,写了domain和service方法,自己写即可
<packaging>pom</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <!--2.0.6对应的cloud版本是Finchley.SR2--> <spring-cloud.version>Finchley.SR2</spring-cloud.version> <springboot.version>2.0.6.RELEASE</springboot.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${springboot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2.注册中心
2.1主方法:
@SpringBootApplication @EnableEurekaServer //表示是eureka的注册中心服务端 public class UserProviderApplication_1000 { public static void main(String[] args) { SpringApplication.run(UserProviderApplication_1000.class,args); } }
2.2配置:
#C:\Windows\System32\drivers\etc\hosts hosts这个文件没有后缀,加一个 # 在里面加上 127.0.0.1 peer1001 127.0.0.1 peer1000 server: port: 1000 eureka: instance: hostname: peer1000 client: registerWithEureka: false #作为一个注册中心不需要注册自己是否要注册到eureka fetchRegistry: false #表示是否从Eureka Server获取注册信息 serviceUrl: defaultZone: http://peer1001:1001/eureka/ #集群配置 #另一个集群的配置里面写的是http://peer1000:1000/eureka/ # defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ 单机配置
2.3pom
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <!--eureka-server包涵了eureka-client的包--> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
3.服务端(发送端)
搭建集群的话,拷贝改端口即可,但是名字必须一样,也就是下面配置里的比如sending.
3.1主方法
@SpringBootApplication @EnableEurekaClient //可加可不加,加了默认是euraka public class UserProviderApplication_3333 { public static void main(String[] args) { SpringApplication.run(UserProviderApplication_3333.class, args); } }
3.2controller类
@RestController public class UserController { @Autowired private IEmployeeService employeeService; //可以获取到配置里面的端口号 @Value("${server.port}") private String port; @RequestMapping("/employee/{id}") //将{id}的值转换成传入的参数 public Employee employee(@PathVariable("id") Long id) { System.out.println(port); return employeeService.selectById(id); } }
3.3配置
server: port: 3333 eureka: client: # registerWithEureka: false #作为一个注册中心不需要注册自己是否要注册到eureka #fetchRegistry: false #表示是否从Eureka Server获取注册信息 serviceUrl: defaultZone: http://peer1000:1000/eureka/,http://peer1001:1001/eureka/ # instance: # prefer-ip-address: true #使用ip注册,没有的话是名字注册 spring: application: name: sending
3.4 pom
<dependency> <!--自己写一个domain和service即可--> <groupId>cn.itsource</groupId> <artifactId>common-user</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
3.客户端(接收端)用feign,相对简单
Feign是基于Ribbon封装的。
3.1主方法
@SpringBootApplication @EnableEurekaClient //可加可不加,加了默认是euraka @EnableFeignClients //开启Fiegn public class UserProviderApplication_4444 { public static void main(String[] args) { SpringApplication.run(UserProviderApplication_4444.class, args); } }
3.2feign接口
/** * @FeignClient("SENDING") 代表这个接口是一个feign的客户端 * SENDING 是这个接口要调用的远程服务的名字(sending),上传注册中心时,会改成大写 */ @FeignClient("SENDING") public interface FeignClientEmployee { //方法名和参数最好要跟发送端的一致,最好复制过来 @RequestMapping("/employee/{id}") //将{id}的值转换成传入的参数 public Employee employee(@PathVariable("id") Long id); }
3.3controller
@RestController public class EmployeeeController { @Autowired private FeignClientEmployee feignClientEmployee; @RequestMapping("/employee/{id}") //将{id}的值转换成传入的参数 public Employee hello(@PathVariable("id") Long id){ return feignClientEmployee.employee(id); } }
3.4配置
server: port: 4444 eureka: client: # registerWithEureka: false #作为一个注册中心不需要注册自己是否要注册到eureka #fetchRegistry: false #表示是否从Eureka Server获取注册信息 serviceUrl: defaultZone: http://peer1000:1000/eureka/,http://peer1001:1001/eureka/ spring: application: name: getting
3.5pom
<dependency> <groupId>cn.itsource</groupId> <artifactId>common-user</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
4.客户端(接收端)Ribbon方式,相对复杂
4.1主方法
@SpringBootApplication @EnableEurekaClient //可加可不加,加了默认是euraka //@RibbonClients//ribbon的客户端 public class UserProviderApplication_2222 { @Bean @LoadBalanced//负载均衡 public RestTemplate restTemplate() { return new RestTemplate(); } //随机加载集群 @Bean public IRule rule(){ return new RandomRule(); } public static void main(String[] args) { SpringApplication.run(UserProviderApplication_2222.class, args); } }
4.2controller
@RestController public class GetEmployeeController { @Autowired private RestTemplate restTemplate; @RequestMapping("/employee/{id}") //将{id}的值转换成传入的参数 public Employee hello(@PathVariable("id") Long id) { //需要写上发送端在注册中心名字 String url = "http://SENDING/employee/"+id; return restTemplate.getForObject(url,Employee.class); } }
4.3配置
server: port: 2222 eureka: client: serviceUrl: defaultZone: http://peer1000:1000/eureka/,http://peer1001:1001/eureka/ spring: application: name: getting
4.4pom
<dependency> <groupId>cn.itsource</groupId> <artifactId>common-user</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>