# spring_cloud_demo **Repository Path**: lxd040217/spring_cloud_demo ## Basic Information - **Project Name**: spring_cloud_demo - **Description**: 涉及spring cloud:feign ;gateway;hystrix;nacos - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-16 - **Last Updated**: 2023-11-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 分布式事务的mq解决方案 ![分布式事务mq](Snipaste_2023-11-17_20-57-50.png) **具体代码为:order-service模块和bank-service模块** **rabbitmq使用注意事项:** **在消费者和生产者启动类中加入jackson转换类:** ``` @Bean public MessageConverter jsonMessageConverter(){ return new Jackson2JsonMessageConverter(); } ``` ### hystrix自定义降级配置: 1. orderController ``` @RestController @RequestMapping("/order") @Slf4j public class OrderController { @Autowired private OrderService orderService; @Autowired private UserClient userClient; @GetMapping("{orderId}") @HystrixCommand(fallbackMethod = "queryOrderByUserIdFallback") public Order queryOrderByUserId(@PathVariable("orderId") Long orderId) throws InterruptedException { Thread.sleep(10000); // 根据id查询订单并返回 Order order = orderService.queryOrderById(orderId); Long userId = order.getUserId(); User user = userClient.findById(userId); order.setUser(user); return order; } //override the fallback method private Order queryOrderByUserIdFallback(Long orderId){ Order order = new Order(); order.setName("fall back method"); log.info("queryOrderByUserId Fallback:{}",orderId); return order; } } ``` 2. USerClient ``` @FeignClient(value = "userservice",fallbackFactory = UserFallBackFactory.class) public interface UserClient { @GetMapping("/user/{id}") User findById(@PathVariable("id") Long id); } @Component class UserFallBackFactory implements FallbackFactory { private static final Logger LOGGER = LoggerFactory.getLogger(UserFallBackFactory.class); @Override public UserClient create(Throwable cause) { return new UserClient() { @Override public User findById(Long id) { LOGGER.error("调用异常:{}",cause); return null; } }; } } ```