在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate模式,另一种是feign模式
Ribbon+RestTemplate
Ribbon 是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。它可以 在客户端 配置 RibbonServerList(服务端列表),使用 HttpClient 或 RestTemplate 模拟 http 请求,步骤比较繁琐。
Feign
Feign 是在 Ribbon 的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。采用接口的方式, 只需要创建一个接口,然后在上面添加注解即可 ,将需要调用的其他服务的方法定义成抽象方法即可, 不需要自己构建 http 请求。然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写客户端变得非常容易。
Feign和 RestTemplate都内置了Ribbon
1.创建一个maven项目,在pom.xml添加依赖jar文件
org.springframework.boot
spring-boot-starter-parent
2.0.6.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Finchley.SR1
pom
import
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
2.创建application.yml文件
###服务端口号
server:
port: 1011
###服务名称
spring:
application:
name: app-eureka-center
eureka:
instance:
#注册中心地址
hostname: 192.168.199.101
###客户端调用地址
client:
serviceUrl:
defaultZone: http://192.168.199.101:1011/eureka/
###是否将自己注册到Eureka服务中,因为该应用本身就是注册中心,不需要再注册自己(集群的时候为true)
register-with-eureka: false
###是否从Eureka中获取注册信息,因为自己为注册中心,不会在该应用中的检索服务信息
fetch-registry: false
server:
enable-self-preservation:true
3.创建服务启动类
@SpringBootApplication
@EnableEurekaServer //申明这是一个Eureka服务
public class SncApplication {
public static void main(String[] args) {
SpringApplication.run(SncApplication.class, args);
}
}
4.项目结构图
5、测试
1.创建一个maven项目,在pom.xml中导入依赖jar
org.springframework.boot
spring-boot-starter-parent
2.1.12.RELEASE
com.shsnc
snc-base-service
1.0
snc-base-service
snc-base-service
org.springframework.cloud
spring-cloud-dependencies
Greenwich.SR5
pom
import
org.springframework.cloud
spring-cloud-starter-openfeign
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
2.创建application.properties文件
spring.application.name=base-user-center
server.port=10011
eureka.client.serviceUrl.defaultZone=http://192.168.199.101:1011/eureka/
3.创建UserController接口
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/getUserList")
@ResponseBody
public ModelMap getUserList() {
ModelMap modelMap = new ModelMap();
List userList = new ArrayList();
userList.add("用户1");
userList.add("用户2");
userList.add("用户3");
modelMap.put("data", userList);
return modelMap;
}
}
4.创建启动类
@SpringBootApplication
@EnableFeignClients
@EnableEurekaClient
public class SncApplication {
public static void main(String[] args) {
SpringApplication.run(SncApplication.class, args);
}
}
5.测试
6、在eureka注册中心上的效果
1.创建一个maven项目,在pom.xml中导入依赖jar文件
com.shsnc
snc-kanban-service
1.0
snc-kanban-service
snc-kanban-service
org.springframework.boot
spring-boot-starter-parent
2.1.2.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Greenwich.SR5
pom
import
org.springframework.cloud
spring-cloud-starter-openfeign
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
2.创建application.properties文件
spring.application.name=snc-kanban-service
server.port=30006
eureka.client.serviceUrl.defaultZone=http://192.168.199.101:1011/eureka/
3.创建feign客户端接口
@FeignClient(name = "BASE-USER-CENTER")
public interface UserService {
@RequestMapping(value = "/user/getUserList")
public ModelMap getUserList();
}
4.创建消费者接口
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
UserService userService;
@RequestMapping("/getUserList")
public ModelMap getUserList() {
return userService.getUserList();
}
}
5.创建启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class SncApplication {
public static void main(String[] args) {
SpringApplication.run(SncApplication.class, args);
}
}
6、测试, 成功!
参考:https://blog.csdn.net/qq_42296117/article/details/106073073