ldkjdk opened a new issue, #10159:
URL: https://github.com/apache/dubbo/issues/10159

   ## Describe the feature
   <!-- Please also discuss possible business value -->
   
   Implove dubbo-rpc-http for http , and support the https  protocol , example
   <dubbo:reference version="3.0.0" id="thirdPartyProductService"   
interface="com.xxxxx.ThirdPartyProductService" url="https://testdubbo.ddky.com"; 
timeout="60000" />
   
   for mixed cloud deploy , hisroty system of the  base dubbo rpc  transferto 
public cloud, we are will take fllow architect
   public cloud consumer->https://xxxxxxx-> nginx-> private dubbo http service 
provider 
   But have lot of bug , example for jackson serialize issue
   follow is we fixed :
   1. jsonrpc4j version update to 1.5.3 by pom dependency
   2. update HttpProtocol code 
   3.  add resources/META-INF/services/org.apache.dubbo.rpc.Protocol file and 
add  conteht to file http=org.apache.dubbo.rpc.protocol.http.HttpsProtocol
   https=org.apache.dubbo.rpc.protocol.http.HttpsProtocolco
   4. changes
   @SuppressWarnings("unchecked")
       @Override
       protected <T> T doRefer(final Class<T> serviceType, URL url) throws 
RpcException {
           final String generic = url.getParameter(GENERIC_KEY);
           final boolean isGeneric = ProtocolUtils.isGeneric(generic) || 
serviceType.equals(GenericService.class);
           JsonProxyFactoryBean jsonProxyFactoryBean = new 
JsonProxyFactoryBean();
           JsonRpcProxyFactoryBean jsonRpcProxyFactoryBean = new 
JsonRpcProxyFactoryBean(jsonProxyFactoryBean);
           
jsonRpcProxyFactoryBean.setRemoteInvocationFactory((methodInvocation) -> {
               RemoteInvocation invocation = new 
JsonRemoteInvocation(methodInvocation);
               if (isGeneric) {
                   invocation.addAttribute(GENERIC_KEY, generic);
               }
               return invocation;
           });
           String key = url.setProtocol("http").toIdentityString();
           if (isGeneric) {
               key = key + "/" + GENERIC_KEY;
           }
   
           jsonRpcProxyFactoryBean.setServiceUrl(key);
           jsonRpcProxyFactoryBean.setServiceInterface(serviceType);
   
           ObjectMapper mapper = new ObjectMapper();
           //for fixed https://github.com/FasterXML/jackson/issues/106
           mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, 
false);
           jsonProxyFactoryBean.setObjectMapper(mapper);
           
           try {
               boolean acceptGzipResponses = false;
               boolean gzipRequests = false;
               
               Map<String, String> extraHttpHeaders = new HashMap<>();
               // to get gizp properties heads properties
               acceptGzipResponses = 
url.getParameter(DdkyConstants.RESPONSE_GIZP, false);
               gzipRequests = url.getParameter(DdkyConstants.REQUEST_GIZP, 
false);
               
              for (Entry<String, String> e:url.getParameters().entrySet()) {
                  if (e.getKey().startsWith(DdkyConstants.HTTP_HEADER)) {
                       String k = 
e.getKey().substring(DdkyConstants.HTTP_HEADER.length());
                      extraHttpHeaders.put(k, e.getValue());
                  }
              }
               
              JsonRpcHttpClient jsonRpcHttpClient = 
                      new JsonRpcHttpClient(mapper, new 
java.net.URL(jsonProxyFactoryBean.getServiceUrl()), 
                              
extraHttpHeaders,gzipRequests,acceptGzipResponses);
              //jsonRpcHttpClient.setRequestListener(jsonProxyFactoryBean.get);
              //jsonRpcHttpClient.setSslContext();
             //jsonRpcHttpClient.setHostNameVerifier(hostNameVerifier);
             String contentType = 
url.getParameter(DdkyConstants.HTTP_CONTENT_TYPE, "application/json-rpc");
             if (contentType != null) {
               jsonRpcHttpClient.setContentType(contentType);
             }
           
            // if (exceptionResolver!=null) {
             //  jsonRpcHttpClient.setExceptionResolver(exceptionResolver);
             // }
             
             
             
              
jsonRpcHttpClient.setConnectionTimeoutMillis(url.getPositiveParameter(Constants.CONNECT_TIMEOUT_KEY,
 Constants.DEFAULT_CONNECT_TIMEOUT));
              
jsonRpcHttpClient.setReadTimeoutMillis(url.getPositiveParameter(TIMEOUT_KEY, 
DEFAULT_TIMEOUT));
              jsonProxyFactoryBean.setJsonRpcHttpClient(jsonRpcHttpClient);
           } catch (Exception e) {
               throw new RuntimeException(e);
           
           }
           
           
           jsonProxyFactoryBean.afterPropertiesSet();
           return (T) jsonProxyFactoryBean.getObject();
       }
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to