服务治理 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做了二次封装,用来负责完成微服务架构中的服务治理功能。

上一篇下一篇

猜你喜欢

热点阅读