项目

微服务之间的调用

微服务之间的认证需要在在每次调用前设置一个拦截器RequestInterceptor,每次请求之间需要将令牌添加到文件中传递给其他业务

public class FeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
    try {
        //使用RequestContextHolder工具获取request相关变量
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (attributes != null) {
            //取出request
            HttpServletRequest request = attributes.getRequest();
            //获取所有头文件信息的key
            Enumeration<String> headerNames = request.getHeaderNames();
            if (headerNames != null) {
                while (headerNames.hasMoreElements()) {
                    //头文件的key
                    String name = headerNames.nextElement();
                    //头文件的value
                    String values = request.getHeader(name);
                    //将令牌数据添加到头文件中
                    requestTemplate.header(name, values);
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}        }

你们支付业务是怎么实现的

1)用户在订单微服务中下单,下单后,会向MQ发送一个延时队列,延时30分钟,队列的信息主要是订单信息。
2)下单成功后,前端调用支付系统,根据订单号创建支付二维码,支付二维码的支付地址由订单微服务调用微信服务获取支付地址。
3)用户看到支付二维码后,开始扫码付款,并进行授权操作,此时如果授权成功,则用户扣款支付成功。
4)用户支付成功后,微信服务器会将支付状态发送给支付微服务,支付微服务会将该信息发给RabbitMQ。
5)在订单系统中会创建一个支付信息消息的监听,读到支付信息后,根据支付结果,如果支付成功,则修改订单状态,如果是支付失败,也修改对应订单状态。
6)防止用户长时间不支付,在订单系统中,还编写一个延时队列监听,半小时后,能监听到订单信息,并在数据库中检查订单是否已经支付,如果已经支付,则无需处理,如果未支付,则需要关闭微信支付,同时修改订单状态和商品状态。

支付过程中出现网络抖动怎么办

支付中如果出现网络古筝,而没有受到微信服务的支付装填响应没怎么处理?
微信服务器提供了一个根据订单号查询支付信息的方法,可以调用该方法查询支付状态信息。