微服务入门demo

Posted chy18883701161

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务入门demo相关的知识,希望对你有一定的参考价值。

 

比如要查询某用户的所有订单 => 在用户服务中访问订单服务。

 


 

 

订单服务

@Controller
@RequestMapping("/order")
public class OrderController {
    //根据user_id查询某用户的所有订单
    @GetMapping("/user/{user_id}")
    @ResponseBody
    public List<Order> queryOrdersByUserId(@PathVariable Integer user_id){
        //进过一系列操作,返回订单列表
        //.....
        return orderList;
    }

    //.....
}

方法返回值要返回给用户服务,需要@ResponseBody转换为json格式,不能String、List、Map什么的直接传过去。

服务本身可能要调用视图来显示,或者直接返回某种类型的数据,不返回json格式的数据,那就需要重新写一个方法来作为服务接口,返回json数据,供其他服务调用。

 

 


 

 

 

用户服务

@Controller
@RequestMapping("/user")
public class UserController {
    //springboot的服务之间使用REST相互访问、调用,springboot已经把REST封装为RestTemplate类,注入使用即可
    private RestTemplate restTemplate;

    @Autowired
    public void setRestTemplate(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/{user_id}/order")
    @ResponseBody
    public List<Order> queryOrdersByUserId(@PathVariable Integer user_id){
        //订单服务的地址
        String url = "http://localhost:8080/order/user/{user_id}";
        //参数:服务地址、期待返回的数据类型(class对象)、要传入的参数
        List<Order> orderList = restTemplate.getForObject(url, List.class,user_id);
        return orderList;
    }

    //.....

}

 

restTemplate.getForObject(url, targetClass,Object...args);     //参数可变

 

参数指的是url中的参数,比如:

String url = "http://localhost:8080/springboot/user/{group}/{user_id}";

restTemplate.getForObject(url, targetClass,实参1,实参2)    //第n个实参对应url中的第n个{ }

 

 

我们看到IDEA提示:不能自动装配,因为找不打RestTemplate类型的实例。

我们需要手动创建一个RestTempalte的实例:

@SpringBootApplication
public class App{
    // 通过指定的方法,自动创建Bean(RestTempalte)的一个实例,放到spring容器中
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(App.class);
    }

}

在引导类中创建,可供此服务的所有类使用。

 

 


 

 

 

上面把服务的url写死在代码中,当然也可以写在application.yml中,使用@Value注入:

server:
  user:
    url: http://localhost:8080/springboot/order/user/{user_id}
    @Value("${server.user.url}")
    private String url;

 

 

虽然好修改url一些,但节点地址依然是死的、固定的,只会访问指定的节点,做负载均衡、或者服务节点增减时怎么办?

传统的方式是使用nginx做代理、负载均衡,由nginx决定分发到该服务的哪个节点。

微服务有自己的处理方式:SpringCloud使用Eureka来注册、发现服务,Dubbo使用Zookeeper来注册、发现服务。

 

以上是关于微服务入门demo的主要内容,如果未能解决你的问题,请参考以下文章

※Spring全家桶从入门到X神-微服务+远程调用(RestTemplate)

Micronaut微服务 实战入门

微前端——乾坤qiankun Demo

Java 微服务 day01 源代码 SpringBoot的SpringMVC快速入门

微信小程序开发入门教程

微信H5支付demo