使用SpringCloud实现远程调用案例

未使用分布式前,大部分项目为单体架构,所有功能放在一个项目中,使各个模块关联比较高。

如果功能A需要集成B的功能,如果功能B 逻辑改变 ,A也需要改变

 下面的案例,使用分布式架构,通过工具类发送http请求获取另一模块信息;代码如下

 SpringClound依赖

  <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

功能模块A 

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

@Data
@Controller
public class User {
    private Long id;
    private String username;
    private String address;
}
//声明配置类
@Configuration
public class configuration {


    //可以用RestTemplate对象发http请求
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }


}

Mapper

@Mapper
public interface OrderMapper extends BaseMapper<Order> {

    @Select("select * from tb_order where id = #{id}")
    Order findById(Long id);
}
Service层
@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    //注入RestTemplate
    @Autowired
    private RestTemplate RestTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2调用api,u的请求是功能B的请求路径
        String u="http://localhost:8081/user/id?id="+ order.getUserId();
        //3形参2 :JOSN序列化指定对象
        User forObject = RestTemplate.getForObject(u, User.class);
        order.setUser(forObject);
        // 4.返回
        return order;
    }
}
@Controller
@RequestMapping("/order")
public class OrderController {

   @Autowired
   private OrderService orderService;

    @GetMapping("/getId")
    @ResponseBody
    public Order queryOrderByUserId( int orderId) {
        // 根据id查询订单并返回
        return orderService.queryOrderById((long) orderId);
    }

 功能模块B

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

@Mapper
public interface UserMapper extends BaseMapper<User> {
    
    @Select("select * from tb_user where id = #{id}")
    User findById(@Param("id") Long id);
}
@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User queryById(Long id) {
        return userMapper.findById(id);
    }
}
@Slf4j
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 路径: /user/110
     *
     * @param id 用户id
     * @return 用户
     */
    @GetMapping("/id")
    @ResponseBody
    public User queryById( int id) {
        return userService.queryById((long) id);
    }
}

测试 

 需要sql文件私信我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值