服务治理 Spring Cloud Eureka的入门(一)
2018-11-16 本文已影响0人
DQ大神奇
使用Http进行远程调用
一开始用一个简单的http远程调用程序开始说起。在微服务体系中,不同的服务部署在不同的服务器上,服务器与服务器之间需要通过接口相互调用。其调用方式可以称之为远程调用。 常见的远程调用一般有两种方式,一个是RPC,早起的webservice和现在热门的dubbo都是典型的rpc调用。另一种调用方式就是基于http。现在热门的Rest风格就可以通过http协议来实现。
下面就简单的实现一下http远程调用。
首先,创建两个spring boot工程,一个作为服务的提供者,一个作为服务的消费者。
image.png
user-service-demo简单的整合了mybatis用于根据id查找用户
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User queryById(@PathVariable("id") Long id){
User user = this.userService.queryById(id);
System.out.print(user);
return user;
}
}
独立调用后的结果如下:
image.png
user-consume-demo通过http调用user-service-demo提供的服务
首先,引入依赖okhttp
<!-- 添加OkHttp支持 -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.9.0</version>
</dependency>
启动时候注入Bean
@SpringBootApplication
public class UserConsumerDemoApplication {
@Bean
public RestTemplate restTemplate() {
// 使用了OkHttp客户端,只需要注入工厂即可
return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
}
public static void main(String[] args) {
SpringApplication.run(UserConsumerDemoApplication.class, args);
}
}
同user-service-demo写好controller和service,但是dao层由于可以直接调用user-service-demo,所以不需要mybatis与数据库进行交互
获取RestTemplate类,通过http的url调用获取User对象
@Component
public class UserDao {
@Autowired
private RestTemplate restTemplate;
public User queryUserById(Long id){
String url = "http://localhost:8081/user/" + id;
return this.restTemplate.getForObject(url, User.class);
}
}
结果如下:
image.png
总结
服务与服务之间可以通过http进行调用,但是直接进行调用的话,需要手写要调用服务的url,一旦服务特别多,就会变得很麻烦。对此,Spring Cloud基于Netflix Eureka做了二次封装,用来负责完成微服务架构中的服务治理功能。