SpringCloud(二)【单体服务及远程调用】

SpringCloud(一)【微服务介绍】


一、单体服务演示

两个服务:order-serviceuesr-service

  1. 数据库表结构
    此处模拟出两个不同的模块使用不同的数据库的情况。
    在这里插入图片描述
  2. 项目工程
    • order服务

      @Service
      public class OrderService {
          @Resource
          private RestTemplate restTemplate;
      
          public Order queryOrderById(Long orderId) {
              // 1.查询订单
              Order order = orderMapper.findById(orderId);
              // 2.返回
              return order;
          }
      }
      
    • OrderMapper

      public interface OrderMapper {
      	    @Select("select * from tb_order where id = #{id}")
      	    Order findById(Long id);
      	}
      
    • user服务

      @Service
      public class UserService {
      
          @Resource
          private UserMapper userMapper;
      
          public User queryById(Long id) {
              return userMapper.findById(id);
          }
      }
      
    • UserMapper

      public interface UserMapper {
          
          @Select("select * from tb_user where id = #{id}")
          User findById(@Param("id") Long id);
      }
      
    • pojo

      • user

        @Data
        public class User {
            private Long id;
            private String username;
            private String address;
        }
        
      • order

        @Data
        public class Order {
            private Long id;
            private Long price;
            private String name;
            private Integer num;
            private Long userId;
            private User user;
        }
        

Order中包含User的信息,Order服务的数据库表中只存储了userId字段,如果这个时候我们分别启动两个服务,来看看效果。
在这里插入图片描述
3. 分别启动效果
在这里插入图片描述
在这里插入图片描述

可以看到8080端口的order并未返回user的详细信息。如果要获取user的详细信息则需要实现两个服务之间的通信。

二、实现远程调用

(一)实现服务间通信(RestTemplate)

  1. 注入RestTemplate
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
  1. 使用RestTemplate进行通信
@Service
public class OrderService {

    @Resource
    private OrderMapper orderMapper;

    @Resource
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2.利用restTemplate发起http请求
        String url = "http://localhost:8081/user/"+order.getUserId();
        ResponseEntity<User> user = restTemplate.getForEntity(url, User.class);
        order.setUser(user.getBody());
        // 3.返回
        return order;
    }
}

(二)查看效果

重新启动服务查看效果
在这里插入图片描述
可以看到user已经有了详细信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值