V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shayang888
V2EX  ›  Java

[dubbo]为什么两次同样的请求,协议却不一样

  •  1
     
  •   shayang888 · 2023-03-05 10:23:13 +08:00 · 1325 次点击
    这是一个创建于 424 天前的主题,其中的信息可能已经有所发展或是发生改变。
    环境:
    jdk:19
    dubbo:3.2.0.beta-5
    springboot: 3.0.4
    
    这是我的 dubbo 过滤器
    @Activate(group = CommonConstants.CONSUMER, value = "cookieValidationFilter")
    public class CookieValidationFilter implements Filter {
        @Override
        public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
            RpcContext context = RpcContext.getServerContext();
            return invoker.invoke(invocation);
        }
    }
    
    这是我的 controller:
    @DubboReference
        UserService userService;
    
        @PostMapping(value = "/sign_in", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
        public ServerResponseEntity<Object> loginController(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
            RpcContext context = RpcContext.getServerContext();
            System.out.println("rest 接口");
            System.out.println(context.getProtocol());
            System.out.println(context.getRemoteAddressString());
            System.out.println("-----------------------------------------");
            String userInfo = serverHttpRequest.getHeaders().getFirst(USERINFO);
            ServerResponseEntity<Object> responseEntity = userService.loginService(userInfo);
            serverHttpResponse.addCookie(ResponseCookie.from("COOKIE_ID", String.valueOf(responseEntity.getData())).build());
            return responseEntity;
        }
    
    这是我的 service:
    @Override
        public ServerResponseEntity<Object> loginService(String userInfo) {
            try {
                responseEntity = new ServerResponseEntity<>(0, "login success!", Decryptor.decrypt(userInfo));
            } catch (Exception e) {
                logger.info(e.toString());
            }
            return responseEntity;
        }
    
    这是我的 consumer 配置文件:
    server.port=8081
    
    spring.application.name=consumer
    spring.cloud.nacos.discovery.server-addr=192.168.220.128:8848
    
    dubbo.application.name=consumer
    dubbo.registry.address=nacos://192.168.220.128:8848
    dubbo.protocol.port=-1
    dubbo.consumer.protocol=tri
    dubbo.consumer.filter=appended
    dubbo.application.qos-port=22223
    
    这是打印结果:
    这是客户端连续两次调用 /sign_in 的打印结果
    rest 接口
    null
    null:0
    -----------------------------------------
    rest 接口
    tri
    null:0
    -----------------------------------------
    

    问:为什么前后两次协议打印结果不一样,第一次 null ,第二次是 tri

    v2e0xAdmin2
        1
    v2e0xAdmin2  
       2023-03-05 13:53:41 +08:00
    是不是服务端有 2 个节点? 2 个节点的代码不一样导致的?
    shayang888
        2
    shayang888  
    OP
       2023-03-05 16:52:26 +08:00
    @v2e0xAdmin2 应该不是这个,nacos 里就 3 个,一个映射的 UserService ,一个 provider ,一个 consumer
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   962 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:26 · PVG 02:26 · LAX 11:26 · JFK 14:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.