すべてのプロダクト
Search
ドキュメントセンター

Enterprise Distributed Application Service:Ali-Tomcatを使用してHSFからDubboにアプリケーションを移行する

最終更新日:Mar 05, 2025

このトピックでは、Ali-Tomcatを使用して、高速サービスフレームワーク (HSF) からApache Dubbo (Dubbo) フレームワークにアプリケーションを移行する方法について説明します。

移行ソリューション

移行の最終目標は、HSFとEnterprise Distributed Application Service (EDAS) のレジストリからDubboとNacosレジストリにアプリケーションを移行することです。 2つのソリューションが利用可能です。

  • 2ステップ移行

    1. HSFとEDAS のレジストリからDubboとEDAS のレジストリに移行します。

    2. EDAS のレジストリからNacosレジストリに移行します。

    このソリューションは高い安定性を特徴とし、小ステップ反復に適しています。 ただし、アプリケーションは2回公開する必要があります。

  • 直接移行

    HSFとEDAS のレジストリからDubboとNacosレジストリに移行します。

    HSFはNacosをサポートしていません。 追加の開発が必要です。

アプリケーションをすばやくDubboに移行してリリースする場合は、安定性を考慮して最初のソリューションを使用することをお勧めします。 次のセクションでは、2段階の移行を実行する方法について説明します。

移行アーキテクチャ

Dubboサービスは、HSFサービスのコンシューマーがDubboサービスを確実に発見できるように、HSFとDubboの両方の形式で登録されています。 Dubboサービスコンシューマは、HSFおよびDubboフォーマットのデータをサブスクライブして、DubboサービスコンシューマがHSFサービスを確実に発見するようにする。

前提条件

移行に必要な次のコンポーネントがデプロイされます。

HSFサービスとDubboサービスの両方が、edas-demo-interfaceという名前の同じインターフェイスから継承すると仮定します。 インターフェイスには、次のディレクトリ構造を持つインターフェイス宣言が1つだけ含まれます。

├── pom.xml
├── src
│ └── main
│     └── java
│         └── com
│             └── alibaba
│                 └── edas
│                     └── DemoService.java

サービスプロバイダーの移行

次のファイルを含むHSFアプリケーションedas-hsf-demo-provider-warを移行するとします。

  • pom.xmlは、アプリケーションのモジュール間の依存関係の設定ファイルです。

  • DemoServiceImpl.javaは、DemoServiceの実装です。

  • hsf-provider-beans.xmlは、HSFのSpring bean宣言ファイルです。

  • web.xmlは、WARパッケージのデプロイに使用される記述子です。

次の情報は、edas-hsf-demo-provider-warディレクトリの構造を示しています。

├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │     └── alibaba
│ │ │         └── edas
│ │ │             └── hsf
│ │ │                 └── provider
│ │ │                     └── DemoServiceImpl.java
│ │ ├── resources
│ │ │ └── hsf-provider-beans.xml
│ │ └── webapp
│ │     └── WEB-INF
│ │         └── web.xml
  1. Dubboの依存関係をpom.xmlに追加します。

    HSFサービスにはSpring 4.x以降を使用することを推奨します。

    1. HSFクライアントの依存関係を削除します。

      <dependency>
                  <groupId>com.alibaba.edas</groupId>
                  <artifactId>edas-sdk</artifactId>
                  <version>1.5.4</version>
      </dependency>
    2. Dubboの依存関係を追加します。

      • edas-dubbo-extensionは、EDAS のレジストリにDubboサービスを登録し、HSF形式でDubboサービスを登録してサブスクライブするために使用されます。 完全なpom.xmlファイルの詳細については、サンプルコードをご参照ください。

      • dubboは標準のDubbo依存関係です。

      <dependency>
                  <groupId>com.alibaba.edas</groupId>
                  <artifactId>edas-dubbo-extension</artifactId>
                  <version>2.0.5</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.dubbo</groupId>
                  <artifactId>dubbo</artifactId>
                  <version>2.7.3</version>
              </dependency>
              <dependency>
                  <groupId>log4j</groupId>
                  <artifactId>log4j</artifactId>
              </dependency>
  2. hsf-provider-beans.xmlをdubbo-provider-beans.xmlに変更します。

    hsf-provider-beans.xmlファイルの設定を次に示します。

    <? xml version="1.0" encoding="UTF-8"? >
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:hsf="http://www.taobao.com/hsf"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.taobao.com/hsf
           http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName">
        <bean id="itemService" class="com.alibaba.edas.hsf.provider.DemoServiceImpl" />
    
        <! -- Example of providing a service -->
        <hsf:provider id="demoService" interface="com.alibaba.edas.DemoService"
            ref="itemService" version="1.0.0">
        </hsf:provider>
    </beans>

    dubbo-provider-beans.xmlに変更する必要があります。

    <? xml version="1.0" encoding="UTF-8"? >
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
        <dubbo:application name="edas-dubbo-demo-provider"/>
        <dubbo:registry id="edas" address="edas://127.0.0.1:8080">
            <! -- This means Dubbo services will be registered as HSF format, so that hsf consumer can discover it. -->
            <dubbo:parameter key="hsf.enable" value="true"/>
        </dubbo:registry>
        <bean id="demoService" class="com.alibaba.edas.dubbo.provider.DemoServiceImpl"/>
        <dubbo:service interface="com.alibaba.edas.DemoService" ref="demoService" group="HSF" version="1.0.0"/>
    </beans>
    説明
    • Dubboレジストリのアドレスは、edas:// 127.0.0.1:8080に設定する必要があります。 edasで始める必要があります。 IPアドレスとポート番号は変更できません。展開中に、EDAS によってオンラインサービスのIPアドレスとポート番号が自動的に置き換えられます。

    • <dubbo:parameter key="hsf.enable" value="true"/> を追加する必要があります。これは、HSFクライアントがサービスを確実に検出するために、DubboサービスがHSF形式とDubbo形式の両方で登録されていることを意味します。

    • <dubbo:service> ラベルのグループとバージョンを指定する必要があります。 デフォルトグループはHSFで、デフォルトバージョンは1.0.0です。 それ以外の場合、HSFクライアントを呼び出すことはできません。

  3. web.xmlファイルで、hsf-provider-beans.xmlをdubbo-provider-beans.xmlに置き換えます。

    hsf-provider-beans.xmldubbo-provider-beans.xmlに置き換えるだけです。

    <! DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc. //DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app>
        <display-name>Archetype Created Web Application</display-name>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dubbo-provider-beans.xml</param-value>
        </context-param>
        <listener>
            <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>
    </web-app>
  4. ローカル環境で結果を確認します。

    ローカル環境での検証には、サービスを登録できるかどうかの検証と、サービスコンシューマがサービスを呼び出すことができるかどうかの検証が含まれます。

    1. サービスを登録できるかどうかを確認します。

      1. HSFアプリケーションをローカルレジストリに登録するには、hostsファイルに次のエントリ (/etc/hostsなど) を追加します。

        127.0.0.1     jmenv.tbsite.net
      2. ダウンロードします。軽量構成レジストリパッケージを解凍し、binディレクトリに移動して、. /startup.shコマンドを実行して、軽量構成レジストリを起動します。

      3. mvn clean packageコマンドを実行して、edas-hsf-demo-provider-warをWARパッケージにコンパイルします。

        コンパイル後、ファイルはターゲットディレクトリに保存されます。

      4. edas-hsf-demo-provider.warをAli-Tomcatに、edas-dubbo-demo-provider.warをApache Tomcatにデプロイします。

        説明

        2つのTomcatプログラムを起動するために使用されるポートは、互いに競合する可能性があります。 この場合、Tomcatのconf/server.xmlファイルでポート8005と8080を検索し、競合しないポートに変更します。

      5. http:// 127.0.0.1:8080/#/serviceManagementで軽量構成レジストリにアクセスし、com.alibaba.edas.DemoService:1.0.0サービスを表示します。

        サービスが登録されており、2つのインスタンスがある場合、DubboサービスとHSFサービスはHSF形式で同じサービスとして登録されます。

    2. サービスコンシューマがサービスを呼び出すことができるかどうかを確認します。

      次の手順を実行して、移行したサービスプロバイダーをコンシューマーが呼び出すことができるかどうかを確認します。

      1. edas-HSF-demo-consumer-warなど、テスト用のhsfサービスコンシューマを次のディレクトリ構造で準備します。

        ├── pom.xml
        ├── src
        │ ├── main
        │ │ ├── java
        │ │ │ └── com
        │ │ │     └── alibaba
        │ │ │         └── edas
        │ │ │             └── hsf
        │ │ │                 └── consumer
        │ │ │                     └── IndexServlet.java
        │ │ ├── resources
        │ │ │ └── hsf-consumer-beans.xml
        │ │ └── webapp
        │ │     └── WEB-INF
        │ │         └── web.xml

        コンシューマは、コンシューマがHTTP要求を受信した後にHSFサービスコールを開始するために使用されるサーブレットを提供する。

        public class IndexServlet extends HttpServlet {
        
            private DemoService demoService;
        
            @Override
            public void init() {
                WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
                this.demoService = (DemoService) wac.getBean("demoService");
            }
        
            @Override
            public void doGet( HttpServletRequest req, HttpServletResponse resp ) {
                String result = demoService.sayHello("hsf");
                System.out.println("Received: " + result);
            }
        }
      2. mvn clean packageコマンドを実行して、edas-hsf-demo-consumer-waredas-hsf-demo-consumer.warにコンパイルし、edas-hsf-demo-consumer.warを別のAli-Tomcatコンテナにデプロイします。 ポートが競合しないようにしてください。

      3. 軽量構成レジストリコンソールにログインします。

        通常、HSFサービスのコンシューマーデータはコンソールに表示されません。

      4. Ali-Tomcatが起動したら、次のURLに移動します。

        curl http:// localhost:8280/edas-hsf-demo-consumer/index.htm
      5. edas-hsf-demo-consumer.warのAli-Tomcatコンテナの標準出力を確認します。

        出力が次の情報に似ている場合、HSFクライアントはDubboサービスとHSFサービスの両方を呼び出しています。

        受信した

        Received: Hello hsf, response from hsf provider: /192.168.XX.XX:62385
        Received: Hello hsf, response from dubbo provider: 192.168.XX.XX:20880
        Received: Hello hsf, response from hsf provider: /192.168.XX.XX:62385
        Received: Hello hsf, response from hsf provider: /192.168.XX.XX:62385
        Received: Hello hsf, response from dubbo provider: 192.168.XX.XX:20880
        Received: Hello hsf, response from hsf provider: /192.168.XX.XX:62385
        Received: Hello hsf, response from dubbo provider: 192.168.XX.XX:20880
        Received: Hello hsf, response from dubbo provider: 192.168.XX.XX:20880
        Received: Hello hsf, response from hsf provider: /192.168.XX.XX:62385
        Received: Hello hsf, response from hsf provider: /192.168.XX.XX:62385
        Received: Hello hsf, response from hsf provider: /192.168.XX.XX:62385

サービスコンシューマの移行

edas-hsf-demo-consumer-warに基づいて、サービスコンシューマーをedas-dubbo-demo-consumer-warに移行します。

  1. Dubboの依存関係をpom.xmlに追加します。

    サービス・コンシューマは、サービス・プロバイダと同じ方法で移行することができる。 主な操作には、dubboとdubbo-edas-extensionの依存関係の追加、edas-sdkの依存関係の削除が含まれます。 詳細については、「サービスプロバイダーの移行」セクションの「Dubbo依存関係をpom.xmlに追加する」をご参照ください。

  2. 変更hsf-comsumer-beans.xmldubbo-consumer-beans.xml.

    hsf-consumer-beans.xmlファイルの構成を次に示します。

    <? xml version="1.0" encoding="UTF-8"? >
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:hsf="http://www.taobao.com/hsf"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.taobao.com/hsf
           http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName">
    
        <! -- Example of consuming a service -->
        <hsf:consumer id="demoService" interface="com.alibaba.edas.DemoService" version="1.0.0">
        </hsf:consumer>
    </beans>

    ファイルをdubbo-consumer-beans.xmlに変更します。

    <? xml version="1.0" encoding="UTF-8"? >
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
        <dubbo:application name="edas-dubbo-demo-consumer"/>
        <dubbo:registry id="edas" address="edas://127.0.0.1:8080">
            <! -- This means Dubbo consumer will subscribe HSF services -->
            <dubbo:parameter key="hsf.enable" value="true"/>
        </dubbo:registry>
        <dubbo:reference id="demoService" interface="com.alibaba.edas.DemoService" group="HSF" version="1.0.0" check="false"/>
    </beans>
    説明
    • Dubboレジストリのアドレスはedas:// で始まる必要があります。

    • <dubbo:service> ラベルにgroupversionを指定します。 groupversionがサービスプロバイダーと同じであることを確認します。 デフォルトのグループはHSFで、デフォルトのバージョンは1.0.0です。

    • check="false" 設定を追加します。これは、アプリケーションが起動しようとしたときに、サービスコンシューマアプリケーションがサービスプロバイダーのアドレスなしですぐに失敗することはないことを意味します。

    • 設定 <dubbo:parameter key="hsf.enable" value="true"/> を追加します。

  3. web.xmlファイルで、hsf-consumer-beans.xmlをdubbo-comsumer-beans.xmlに置き換えます。

  4. ローカル環境で結果を確認します。

    ローカル環境での検証には、サービスが軽量構成レジストリに登録されているかどうかの検証と、HSFおよびDubboサービスを呼び出すことができるかどうかの検証が含まれます。

    1. 前述のプロジェクトをedas-dubbo-demo-consumer.warにパッケージ化し、Apache Tomcatにデプロイします。

      重要

      ポートが競合しないようにしてください。

    2. 軽量構成レジストリコンソールにログインして、Dubboサービスコンシューマが登録されているかどうかを確認します。

      登録されたコンシューマサービスがコンソールに表示された場合、サービスが登録されます。

    3. http:// localhost:8280/edas-dubbo-demo-consumer/index.htmに移動:

      curl http:// localhost:8280/edas-dubbo-demo-consumer/index.htm
    4. HSFクライアントのApache Tomcatの標準出力を確認します。

      出力が次の情報に似ている場合、DubboサービスコンシューマはHSFおよびDubboサービスを消費しています。

      受信した

      Received: Hello dubbo, response from dubbo provider: 192.168.XX.XX:20880
      Received: Hello dubbo, response from dubbo provider: 192.168.XX.XX:20880
      Received: Hello dubbo, response from hsf provider: /192.168.XX.XX:12202
      Received: Hello dubbo, response from hsf provider: /192.168.XX.XX:12202
      Received: Hello dubbo, response from dubbo provider: 192.168.XX.XX:20880
      Received: Hello dubbo, response from hsf provider: /192.168.XX.XX:12202
      Received: Hello dubbo, response from hsf provider: /192.168.XX.XX:12202
      Received: Hello dubbo, response from dubbo provider: 192.168.XX.XX:20880
      Received: Hello dubbo, response from dubbo provider: 192.168.XX.XX:20880
      Received: Hello dubbo, response from hsf provider: /192.168.XX.XX:12202
      Received: Hello dubbo, response from hsf provider: /192.168.XX.XX:12202
      Received: Hello dubbo, response from dubbo provider: 192.168.XX.XX:20880
      Received: Hello dubbo, response from dubbo provider: 192.168.XX.XX:20880

EDAS にアプリケーションをデプロイし、結果を確認する

このトピックでは、Elastic Compute Service (ECS) クラスターでのデプロイを例として使用します。 EDASで、次の4つのアプリケーションを作成します。

  • edas-dubbo-demo-consumerは、移行後のサービスコンシューマアプリケーションです。 ランタイム環境はApache Tomcat 7.0.91です。

  • edas-dubbo-demo-providerは、移行後のサービスプロバイダーアプリケーションです。 ランタイム環境はApache Tomcat 7.0.91です。

  • edas-hsf-demo-consumerは、移行前のサービスコンシューマアプリケーションです。 ランタイム環境はEDAS-Container V3.5.4です。

  • edas-hsf-demo-providerは、移行前のサービスプロバイダーアプリケーションです。 ランタイム環境はEDAS-Container V3.5.4です。

  1. 4つのWARパッケージを4つのアプリケーションに個別にデプロイします。 詳細については、「EDASへのアプリケーションのデプロイ」「」をご参照ください。

  2. 次のコマンドを実行して、サービスコンシューマーedas-hsf-demo-consumerがHSFおよびDubboサービスプロバイダーを呼び出すことができるかどうかを確認します。

    curl http:// 39.106.XX.XXX:8080/index.htm
  3. edas-hsf-demo-consumerアプリケーションのAli-Tomcatの標準出力でログを表示します。/home/admin/taobao-tomcat-production-7.0.XX.X/logs/catalina.out.

    出力が次の情報に類似している場合、HSFサービスコンシューマはHSFサービスとDubboサービスを消費しています。

  4. 次のコマンドを実行して、edas-dubbo-demo-consumerがHSFおよびDubboサービスプロバイダーを呼び出すことができるかどうかを確認します。

    curl http:// 192.168.XX.XX:8080/index.htm
  5. edas-dubbo-demo-consumerアプリケーションのApache Tomcatの標準出力のログを表示します。/home/admin/apache-tomcat-7.0.91/logs/catalina.out.

    出力が次の情報に似ている場合、DubboサービスコンシューマはHSFおよびDubboサービスを消費しています。

よくある質問

  • Dubboサービスコンシューマーの起動後にサービスプロバイダーのアドレスが見つからないのはなぜですか?

    問題の説明

    java.lang.IllegalStateException: Failed to check the status of the service com.xxxx.xxxxx.service.xxxxxConfigService. No provider available for the service HSF/com.xxxxx.xxxxx.service.xxxxxxxxxxService:1.0.0 from the url edas://127.0.0.1:8080/org.apache.dubbo.registry.RegistryService? application=xxxx-flow-center-bj&dubbo=2.0.2&group=HSF&interface=com.xxxx.xxxxxx.service.xxxxxxxxxxService&lazy=false&methods=queryConfigs,getConfig,saveConfig&pid=11596&register.ip=xxx.xx.xx.xxx&release=2.7.3&revision=1.0.1-SNAPSHOT&side=consumer&sticky=false&timeout=2000&timestamp=1564242421194&version=1.0.0 to the consumer xxx.xx.xx.xxx use dubbo version 2.7.3

    を使用

    考えられる原因

    レジストリはサービスプロバイダーのアドレスを非同期にプッシュします。 デフォルトでは、起動時にサービスプロバイダーのアドレスが使用可能かどうかを確認します。 利用可能なアドレスがない場合、このエラーが発生します。

    解決策

    dubboの <Dubbo: reference> ラベルに、次のcheck="false" 設定を追加します。

    <dubbo:reference id="demoService" interface="com.alibaba.edas.DemoService" group="HSF" version="1.0.0" check="false"/>

    設定が追加された後、Dubboは起動中にサービスプロバイダーのアドレスが利用可能かどうかをチェックしません。 ただし、ビジネス初期化コードでDubboサービスを呼び出す必要がある場合、ビジネスは失敗する可能性があります。

  • HSFサービスのコンシューマーがDubboサービスを呼び出すときにエラーが発生するのはなぜですか?

    問題の説明

    2019-07-28 23:07:38.005 [WARN ] [cf67433d1e7a44412a518bd190100d176-node401] [NettyServerWorker-6-1] [o.a.d.r.exchange.codec.ExchangeCodec:91] |  [DUBBO] Fail to encode response: Response [id=343493, version=HSF2.0, status=20, event=false, error=null, result=AppResponse [value=FlowControlDto(postWeightDtoHashMap={614215325=PostWeightDto(postId=614215325, weight=1.0, postSourceType=null)}), exception=null]], send bad_response info instead, cause: For input string: "", dubbo version: 2.7.3, current host: xxx.xx.xx.xxx
    java.lang.NumberFormatException: For input string: ""
      at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
      at java.lang.Integer.parseInt(Integer.java:592)
      at java.lang.Integer.parseInt(Integer.java:615)
      at org.apache.dubbo.common.Version.parseInt(Version.java:133)
      at org.apache.dubbo.common.Version.getIntVersion(Version.java:118)
      at org.apache.dubbo.common.Version.isSupportResponseAttachment(Version.java:102)
      at org.apache.dubbo.rpc.protocol.dubbo.DubboCodec.encodeResponseData(DubboCodec.java:195)
      at org.apache.dubbo.remoting.exchange.codec.ExchangeCodec.encodeResponse(ExchangeCodec.java:283)
      at org.apache.dubbo.remoting.exchange.codec.ExchangeCodec.encode(ExchangeCodec.java:71)
      at org.apache.dubbo.rpc.protocol.dubbo.DubboCountCodec.encode(DubboCountCodec.java:40)
      at org.apache.dubbo.remoting.transport.netty4.NettyCodecAdapter$InternalEncoder.encode(NettyCodecAdapter.java:70)
      ...

    考えられる原因

    DubboがV2.7にアップグレードされた後、HSFはDubboと互換性がありません。

    解決策

    EDAS-コンテナをV3.5.5にアップグレードする。 この問題は、HSFのこのバージョンのEDAS-Containerで修正されています。

  • ダボサービスの消費者がHSFサービスプロバイダーに電話しないのはなぜですか?

    問題の説明

    java.lang.Exception: [HSF-Provider-192.168.0.46] Error log: [HSF-Provider] App [xxxxxxx-3b6f-42d3-xxxx-0ad2434xxxxx] failed to verify the caller signature [null] for [com.alibaba.edas.DemoService:1.0.0] [sayHello] from client [192.168.XX.XX]
        com.taobao.hsf.io.remoting.dubbo2.Dubbo2PacketFactory.serverCreate(Dubbo2PacketFactory.java:284)
        com.taobao.hsf.io.stream.AbstractServerStream.write(AbstractServerStream.java:25)
        com.taobao.hsf.io.RpcOutput.flush(RpcOutput.java:37)
        com.taobao.hsf.remoting.provider.ProviderProcessor$OutputCallback.operationComplete(ProviderProcessor.java:155)
        com.taobao.hsf.remoting.provider.ProviderProcessor$OutputCallback.operationComplete(ProviderProcessor.java:130)
        com.taobao.hsf.util.concurrent.AbstractListener.run(AbstractListener.java:18)
        com.taobao.hsf.invocation.AbstractContextAwareRPCCallback.access$001(AbstractContextAwareRPCCallback.java:12)
        com.taobao.hsf.invocation.AbstractContextAwareRPCCallback$1.run(AbstractContextAwareRPCCallback.java:27)
        com.taobao.hsf.util.concurrent.WrappedListener.run(WrappedListener.java:34)
        com.taobao.hsf.invocation.AbstractContextAwareRPCCallback.run(AbstractContextAwareRPCCallback.java:36)
        com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:456)
        com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:817)
        com.google.common.util.concurrent.AbstractFuture.addListener(AbstractFuture.java:595)
        com.taobao.hsf.util.concurrent.DefaultListenableFuture.addListener(DefaultListenableFuture.java:32)
        com.taobao.hsf.remoting.provider.ProviderProcessor.handleRequest(ProviderProcessor.java:55)
        com.taobao.hsf.io.remoting.dubbo2.message.Dubbo2ServerHandler$1.run(Dubbo2ServerHandler.java:65)
        java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        java.lang.Thread.run(Thread.java:748)

    考えられる原因

    HSFでは通話認証が有効になっていますが、Dubboはこの認証をサポートしていません。

    解決策

    -DneedAuth=falseをHSFサービスプロバイダーに追加して、通話認証を無効にします。

  • ダボサービスの消費者がHSFサービスプロバイダーに電話しないのはなぜですか?

    問題の説明

    2019-08-02 17:17:15.187 [WARN ] [cf67433d1e7a44412a518bd190100d176-node401] [NettyClientWorker-4-1] [o.a.d.r.p.dubbo.DecodeableRpcResult:91] | [DUBBO] Decode rpc result failed: null, dubbo version: 2.7.3, current host: xxx.xx.xx.xxx
    java.lang.StackOverflowError: null
     at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:57)
     at sun.reflect.UnsafeByteFieldAccessorImpl.setByte(UnsafeByteFieldAccessorImpl.java:98)
     at java.lang.reflect.Field.setByte(Field.java:838)
     at com.alibaba.com.xxxxxx.hessian.io.JavaDeserializer$ByteFieldDeserializer.deserialize(JavaDeserializer.java:452)
     at com.alibaba.com.xxxxxx.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:276)
     at com.alibaba.com.xxxxxx.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:203)
     at com.alibaba.com.xxxxxx.hessian.io.SerializerFactory.readObject(SerializerFactory.java:532)
     at com.alibaba.com.xxxxxx.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2820)
     at com.alibaba.com.xxxxxx.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2743)
     at com.alibaba.com.xxxxxx.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2278)
     at com.alibaba.com.xxxxxx.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2080)
     at com.alibaba.com.xxxxxx.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2074)
     at com.alibaba.com.xxxxxx.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:406)
     at com.alibaba.com.xxxxxx.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:276)
     at com.alibaba.com.xxxxxx.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:203)
     at com.alibaba.com.xxxxxx.hessian.io.SerializerFactory.readObject(SerializerFactory.java:532)
     at com.alibaba.com.xxxxxx.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2820)
     at com.alibaba.com.xxxxxx.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2743)
     at com.alibaba.com.xxxxxx.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2278)
     at com.alibaba.com.xxxxxx.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2080)
     at com.alibaba.com.xxxxxx.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2074)
     at com.alibaba.com.xxxxxx.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:406)
        ...

    考えられる原因

    HSFサービスは、JDK 8 LocalDateTimeのシリアル化をサポートしていない以前のHessian Liteバージョンを提供し、それに依存します。

    解決策

    EDAS-HSFサービスプロバイダのコンテナをV3.5.5にアップグレードする。