zoukankan      html  css  js  c++  java
  • SpringCloud服务间调用

       SpringCloud服务间的调用有两种方式:RestTemplate和FeignClient。不管是什么方式,他都是通过REST接口调用服务的http接口,参数和结果默认都是通过jackson序列化和反序列化。因为Spring MVC的RestController定义的接口,返回的数据都是通过Jackson序列化成JSON数据。

    一、RestTemplate

    使用这种方式,只需要定义一个RestTemplate的Bean,设置成LoadBalanced即可。

    如下示例:

    @Configuration
    public class SomeCloudConfiguration {
    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
    } 
    

    这样我们就可以在需要用的地方注入这个bean使用:

    public class SomeServiceClass {
    @Autowired
    private RestTemplate restTemplate;
    public String getUserById(Long userId) {
        UserDTO results = restTemplate.getForObject("http://users/getUserDetail/" + userId, UserDTO.class);
        return results;
    }
    }
    

      

    其它示例参考:

    @SpringBootApplication
    public class SleuthClientApplication {
     
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate();
        }
     
        public static void main(String[] args) {
            SpringApplication.run(SleuthClientApplication.class, args);
        }
    }
     
    @RestController
    class HomeController {
     
        private static final Log log = LogFactory.getLog(HomeController.class);
        @Autowired
        private RestTemplate restTemplate;
         
        private String url="http://localhost:9986";
     
        @RequestMapping("/service1")
        public String service1() throws Exception {
            log.info("service1");
            Thread.sleep(200L);
            String s = this.restTemplate.getForObject(url + "/service2", String.class);
            return s;
        }  
    }

    二、FeignClient

     除了上面的方式,我们还可以用FeignClient。

    @FeignClient(value = "users", path = "/users")
    public interface UserCompositeService {
    @RequestMapping(value = "/getUserDetail/{id}",
            method = RequestMethod.GET,
            produces = MediaType.APPLICATION_JSON_VALUE)
    UserDTO getUserById(@PathVariable Long id);
    }  
    

      我们只需要使用@FeignClient定义一个接口,Spring Cloud Feign会帮我们生成一个它的实现,从相应的users服务获取数据。

      其中,@FeignClient(value = “users”, path = “/users/getUserDetail”)里面的value是服务ID,path是这一组接口的path前缀。在下面的方法定义里,就好像设置Spring MVC的接口一样,对于这个方法,它对应的URL是/users/getUserDetail/{id}。然后,在使用它的时候,就像注入一个一般的服务一样注入后使用即可:

    public class SomeOtherServiceClass {
    @Autowired
    private UserCompositeService userService;
    public void doSomething() {
        // .....
        UserDTO results = userService.getUserById(userId);
        // other operation...
    }
    }  
    

    其中遇到的坑请参见:http://dockone.io/article/2140

  • 相关阅读:
    win2003服务器网站和数据库的二周自动备份
    尝试jquery插件的开发
    Git 代码版本管理
    实验三、UML 建模工具的安装与使用
    实验五 单元检测
     实验四 代码评审
    实验二 结队编程(第二阶段)
    结队编程
    第一次实验
    用live writer发布文章文章中含时产生的bug
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/7565524.html
Copyright © 2011-2022 走看看