使用 python 连接Dubbo 服务

系统 1791 0

目录

  • 前言
    • Dubbo python client 安装
    • python 代码
      • 注意
    • 服务提供provider的改变
      • 注意
    • 感想

前言

尝试更熟练的使用macdown,因为AI部分是用python写的,所以想在 python 中调用dubbo的服务。

Dubbo python client 安装

github :https://github.com/apache/dubbo-python
github中安装方法,就不再介绍,也可以直接在 pycharm 里面搜索 dubbo-client,安装 作者是Joe Cao的那个

python 代码

            
              
                # -*- coding: utf-8 -*-
              
              
                from
              
               dubbo_client 
              
                import
              
               ApplicationConfig
              
                ,
              
               ZookeeperRegistry
              
                ,
              
               DubboClient
              
                ,
              
               DubboClientError

service_interface 
              
                =
              
              
                'com.truthso.monitor.service.CompareService'
              
              
registry 
              
                =
              
               ZookeeperRegistry
              
                (
              
              
                '127.0.0.1:2181'
              
              
                )
              
              
compare_provider 
              
                =
              
               DubboClient
              
                (
              
              service_interface
              
                ,
              
               registry
              
                ,
              
               version
              
                =
              
              
                '1.0.0'
              
              
                ,
              
               group
              
                =
              
              
                'gaopin'
              
              
                )
              
              
                print
              
               compare_provider 
              
                .
              
              compare
              
                (
              
              
                {
              
              
    u
              
                'width'
              
              
                :
              
              
                650
              
              
                ,
              
              
    u
              
                'height'
              
              
                :
              
              
                433
              
              
                ,
              
              
    u
              
                'phash'
              
              
                :
              
               u
              
                '1011100001101000101100001101110101101100101001010101111001001010'
              
              
                ,
              
              
    u
              
                'sum'
              
              
                :
              
              
                5429
              
              
                ,
              
              
    u
              
                'ave'
              
              
                :
              
              
                5.0
              
              
                ,
              
              
    u
              
                'dc'
              
              
                :
              
              
                4331
              
              
                ,
              
              
    u
              
                'rSum'
              
              
                :
              
              
                144219
              
              
                ,
              
              
    u
              
                'gSum'
              
              
                :
              
              
                142677
              
              
                ,
              
              
    u
              
                'bSum'
              
              
                :
              
              
                136723
              
              
                ,
              
              
    u
              
                'hash'
              
              
                :
              
              
                4064693128758910538
              
              
                ,
              
              
                }
              
              
                )
              
              
                :
              
            
          
  1. 很好理解 service_interface 是我们调用的接口的名称
  2. ZookeeperRegistry 是 zookeeper 的地址
  3. DubboClient 中 version 是接口的版本,group 是想要调用的接口所在的group
  4. 直接调用 compare_provider 的具体某一个方法

注意

group 无法指定为 * 会报错说找不到
provider 提供的服务的形式 jsonrpc 也就是,protocol Name 的方式是 jsonrpc 不然无法python调用的时候会报错找不到,但是java可以
但是 如果以前是 protocol 是 dubbo 的方式,现在是 jsonrpc ,可能在java中的处理会有不同,比如返回的原来是对象,现在可能是个json

服务提供provider的改变

因为我的项目是动态提供的服务,也就是服务的配置是从 mysql 中读取的,用的是编码的方式提供的

            
              ApplicationConfig applicationConfig 
              
                =
              
              
                new
              
              
                ApplicationConfig
              
              
                (
              
              
                )
              
              
                ;
              
              
applicationConfig
              
                .
              
              
                setName
              
              
                (
              
              config
              
                .
              
              
                getApplicationName
              
              
                (
              
              
                )
              
              
                )
              
              
                ;
              
              

 RegistryConfig registryConfig 
              
                =
              
              
                new
              
              
                RegistryConfig
              
              
                (
              
              
                )
              
              
                ;
              
              
 registryConfig
              
                .
              
              
                setAddress
              
              
                (
              
              config
              
                .
              
              
                getRegistryAddress
              
              
                (
              
              
                )
              
              
                )
              
              
                ;
              
              

 ProtocolConfig protocol 
              
                =
              
              
                new
              
              
                ProtocolConfig
              
              
                (
              
              
                )
              
              
                ;
              
              
 protocol
              
                .
              
              
                setName
              
              
                (
              
              config
              
                .
              
              
                getProtocolName
              
              
                (
              
              
                )
              
              
                )
              
              
                ;
              
              
 protocol
              
                .
              
              
                setPort
              
              
                (
              
              config
              
                .
              
              
                getProtocolPort
              
              
                (
              
              
                )
              
              
                )
              
              
                ;
              
              

 CompareServiceImpl impl 
              
                =
              
              
                new
              
              
                CompareServiceImpl
              
              
                (
              
              
                )
              
              
                ;
              
              

 ServiceConfig
              
                
                  <
                
                CompareService
                
                  >
                
              
               service 
              
                =
              
              
                new
              
              
                ServiceConfig
              
              
                <
              
              
                >
              
              
                (
              
              
                )
              
              
                ;
              
              
 service
              
                .
              
              
                setApplication
              
              
                (
              
              applicationConfig
              
                )
              
              
                ;
              
              
 service
              
                .
              
              
                setRegistry
              
              
                (
              
              registryConfig
              
                )
              
              
                ;
              
              
 service
              
                .
              
              
                setProtocol
              
              
                (
              
              protocol
              
                )
              
              
                ;
              
              
 service
              
                .
              
              
                setInterface
              
              
                (
              
              CompareService
              
                .
              
              
                class
              
              
                )
              
              
                ;
              
              
 service
              
                .
              
              
                setRef
              
              
                (
              
              impl
              
                )
              
              
                ;
              
              
 service
              
                .
              
              
                setVersion
              
              
                (
              
              config
              
                .
              
              
                getVersion
              
              
                (
              
              
                )
              
              
                )
              
              
                ;
              
              
 service
              
                .
              
              
                setGroup
              
              
                (
              
              config
              
                .
              
              
                getGroup
              
              
                (
              
              
                )
              
              
                )
              
              
                ;
              
              

 service
              
                .
              
              
                export
              
              
                (
              
              
                )
              
              
                ;
              
            
          

ProtocolConfig 相关的配置都是在数据库里面所以,只需要把ProtocolName设置为 jsonrpc 就行

注意

需要添加 maven

            
              
                
                  
                    <
                  
                  dependency
                
                
                  >
                
              
              
                
                  
                    <
                  
                  groupId
                
                
                  >
                
              
              org.apache.dubbo
              
                
                  
                    groupId
                  
                  
                    >
                  
                
                
                  
                    
                      <
                    
                    artifactId
                  
                  
                    >
                  
                
                dubbo-rpc-jsonrpc
                
                  
                    
                      artifactId
                    
                    
                      >
                    
                  
                  
                    
                      
                        <
                      
                      version
                    
                    
                      >
                    
                  
                  2.7.2
                  
                    
                      
                        version
                      
                      
                        >
                      
                    
                    
                      
                        
                          dependency
                        
                        
                          >
                        
                      
                    
                  
                
              
            
          

感想

  1. 虽然能调通,但是感觉很多功能不全,比入group直接指定为 * 就不行
  2. 如果想用 python client ,provider 必须是 jsonrpc

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论