全部产品
Search
文档中心

Enterprise Distributed Application Service:Migrasi aplikasi dari HSF ke Dubbo menggunakan Ali-Tomcat

更新时间:Jul 06, 2025

Topik ini menjelaskan cara memigrasikan aplikasi dari High-Speed Service Framework (HSF) ke Apache Dubbo (Dubbo) menggunakan Ali-Tomcat.

Solusi migrasi

Tujuan akhir migrasi adalah untuk memigrasikan aplikasi dari HSF dan registry Enterprise Distributed Application Service (EDAS) ke Dubbo dan registry Nacos. Dua solusi tersedia:

  • Migrasi Dua Langkah

    1. Migrasi dari HSF dan registry EDAS ke Dubbo dan registry EDAS.

    2. Migrasi dari registry EDAS ke registry Nacos.

    Solusi ini memiliki stabilitas tinggi dan cocok untuk iterasi bertahap kecil. Namun, aplikasi harus diterbitkan dua kali.

  • Migrasi Langsung

    Migrasi dari HSF dan registry EDAS ke Dubbo dan registry Nacos.

    HSF tidak mendukung Nacos. Pengembangan tambahan diperlukan.

Jika Anda ingin dengan cepat memigrasikan aplikasi Anda ke Dubbo dan merilisnya, kami sarankan menggunakan solusi pertama demi stabilitas. Bagian berikut menjelaskan cara melakukan migrasi dua langkah.

Arsitektur migrasi

Layanan Dubbo terdaftar dalam format HSF dan Dubbo untuk memastikan konsumen layanan HSF menemukan layanan Dubbo. Konsumen layanan Dubbo berlangganan data dalam format HSF dan Dubbo untuk memastikan konsumen layanan Dubbo menemukan layanan HSF.

Prasyarat

Komponen-komponen berikut yang diperlukan untuk migrasi telah diterapkan:

Asumsikan bahwa baik layanan HSF maupun Dubbo mewarisi antarmuka yang sama bernama edas-demo-interface. Antarmuka tersebut hanya berisi satu deklarasi antarmuka, dengan struktur direktori sebagai berikut:

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

Migrasi penyedia layanan

Asumsikan bahwa Anda ingin memigrasikan aplikasi HSF edas-hsf-demo-provider-war, yang berisi file-file berikut:

  • pom.xml adalah file konfigurasi untuk dependensi antar modul aplikasi.

  • DemoServiceImpl.java adalah implementasi dari DemoService.

  • hsf-provider-beans.xml adalah file deklarasi bean Spring untuk HSF.

  • web.xml adalah deskriptor yang digunakan untuk penyebaran paket WAR.

Informasi berikut menunjukkan struktur direktori 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. Tambahkan dependensi Dubbo ke pom.xml.

    Kami merekomendasikan menggunakan Spring 4.x atau lebih baru untuk layanan HSF.

    1. Hapus dependensi klien HSF.

      <dependency>
                  <groupId>com.alibaba.edas</groupId>
                  <artifactId>edas-sdk</artifactId>
                  <version>1.5.4</version>
      </dependency>
    2. Tambahkan dependensi Dubbo.

      • edas-dubbo-extension digunakan untuk mendaftarkan layanan Dubbo dengan registry EDAS dan mendaftarkan serta berlangganan layanan Dubbo dalam format HSF. Untuk informasi lebih lanjut tentang file pom.xml lengkap, lihat kode contoh.

      • dubbo adalah dependensi standar 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. Ubah hsf-provider-beans.xml menjadi dubbo-provider-beans.xml.

    Informasi berikut menunjukkan konfigurasi file 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" />
    
        <! -- Contoh menyediakan layanan -->
        <hsf:provider id="demoService" interface="com.alibaba.edas.DemoService"
            ref="itemService" version="1.0.0">
        </hsf:provider>
    </beans>

    Anda harus mengubahnya menjadi 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">
            <! -- Ini berarti layanan Dubbo akan didaftarkan dalam format HSF, sehingga konsumen hsf dapat menemukannya. -->
            <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>
    Catatan
    • Alamat registry Dubbo harus diatur ke edas://127.0.0.1:8080. Harus dimulai dengan edas. Alamat IP dan nomor port dapat tetap tidak berubah, yang akan diganti secara otomatis dengan yang dari layanan online oleh EDAS selama penyebaran.

    • Anda harus menambahkan <dubbo:parameter key="hsf.enable" value="true"/>, yang berarti layanan Dubbo didaftarkan dalam format HSF dan Dubbo untuk memastikan klien HSF menemukan layanan tersebut.

    • Anda harus menentukan grup dan versi untuk label <dubbo:service>. Grup default adalah HSF dan versi default adalah 1.0.0. Jika tidak, klien HSF tidak dapat dipanggil.

  3. Di file web.xml, ganti hsf-provider-beans.xml dengan dubbo-provider-beans.xml.

    Anda hanya perlu mengganti hsf-provider-beans.xml dengan dubbo-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. Verifikasi hasil di lingkungan lokal.

    Verifikasi di lingkungan lokal mencakup verifikasi apakah layanan dapat didaftarkan dan verifikasi apakah konsumen layanan dapat memanggil layanan tersebut.

    1. Verifikasi apakah layanan dapat didaftarkan.

      1. Untuk mendaftarkan aplikasi HSF Anda dengan registry lokal, tambahkan entri berikut ke file hosts, seperti /etc/hosts:

        127.0.0.1     jmenv.tbsite.net
      2. Unduh konfigurasi registry ringan, ekstrak paket tersebut, masuk ke direktori bin, dan jalankan perintah ./startup.sh untuk memulai konfigurasi registry ringan.

      3. Jalankan perintah mvn clean package untuk mengompilasi edas-hsf-demo-provider-war menjadi paket WAR.

        Setelah kompilasi, file disimpan di direktori target.

      4. Sebarkan edas-hsf-demo-provider.war ke Ali-Tomcat dan edas-dubbo-demo-provider.war ke Apache Tomcat.

        Catatan

        Port yang digunakan untuk memulai dua program Tomcat mungkin saling bertabrakan. Dalam hal ini, cari port 8005 dan 8080 di file conf/server.xml Tomcat dan ubah ke port yang tidak bertabrakan.

      5. Akses konfigurasi registry ringan di http://127.0.0.1:8080/#/serviceManagement dan lihat layanan com.alibaba.edas.DemoService:1.0.0.

        Jika layanan terdaftar dan memiliki dua instance, layanan Dubbo dan HSF terdaftar sebagai satu layanan yang sama dalam format HSF.

    2. Verifikasi apakah konsumen layanan dapat memanggil layanan tersebut.

      Lakukan langkah-langkah berikut untuk memeriksa apakah penyedia layanan yang dimigrasikan dapat dipanggil oleh konsumen:

      1. Siapkan konsumen layanan HSF untuk pengujian, seperti edas-hsf-demo-consumer-war, dengan struktur direktori berikut:

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

        Konsumen menyediakan servlet yang digunakan untuk memulai pemanggilan layanan HSF setelah konsumen menerima permintaan HTTP.

        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. Jalankan perintah mvn clean package untuk mengompilasi edas-hsf-demo-consumer-war menjadi edas-hsf-demo-consumer.war dan sebarkan edas-hsf-demo-consumer.war ke kontainer Ali-Tomcat lainnya. Pastikan port tidak bertabrakan.

      3. Masuk ke konsol konfigurasi registry ringan.

        Normal jika tidak ada data konsumen layanan HSF yang muncul di konsol.

      4. Setelah Ali-Tomcat dimulai, buka URL berikut:

        curl http://localhost:8280/edas-hsf-demo-consumer/index.htm
      5. Periksa keluaran standar dari kontainer Ali-Tomcat edas-hsf-demo-consumer.war.

        Jika keluarannya mirip dengan informasi berikut, klien HSF telah memanggil layanan Dubbo dan 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

Migrasi konsumen layanan

Berdasarkan edas-hsf-demo-consumer-war, migrasikan konsumen layanan ke edas-dubbo-demo-consumer-war.

  1. Tambahkan dependensi Dubbo ke pom.xml.

    Konsumen layanan dapat dimigrasikan dengan cara yang sama seperti penyedia layanan. Operasi utama termasuk menambahkan dependensi dubbo dan dubbo-edas-extension serta menghapus dependensi edas-sdk. Untuk informasi lebih lanjut, lihat Tambahkan dependensi Dubbo ke pom.xml di bagian "Migrasi Penyedia Layanan".

  2. Ubah hsf-comsumer-beans.xml menjadi dubbo-consumer-beans.xml.

    Informasi berikut menampilkan konfigurasi file 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">
    
        <! -- Contoh mengonsumsi layanan -->
        <hsf:consumer id="demoService" interface="com.alibaba.edas.DemoService" version="1.0.0">
        </hsf:consumer>
    </beans>

    Ubah file menjadi 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">
            <! -- Ini berarti konsumen Dubbo akan berlangganan layanan HSF -->
            <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>
    Catatan
    • Alamat registry Dubbo harus dimulai dengan edas://.

    • Tentukan group dan version untuk label <dubbo:service>. Pastikan group dan version sama dengan milik penyedia layanan. Default group adalah HSF dan default version adalah 1.0.0.

    • Tambahkan konfigurasi check="false", yang berarti aplikasi konsumen layanan tidak akan langsung gagal tanpa alamat penyedia layanan saat aplikasi mencoba memulai.

    • Tambahkan konfigurasi <dubbo:parameter key="hsf.enable" value="true"/>, yang berarti konsumen layanan berlangganan data dari penyedia layanan.

  3. Di file web.xml, ganti hsf-consumer-beans.xml dengan dubbo-comsumer-beans.xml.

  4. Verifikasi hasil di lingkungan lokal.

    Verifikasi di lingkungan lokal mencakup pengecekan apakah layanan terdaftar dengan konfigurasi registry ringan serta verifikasi kemampuan pemanggilan layanan HSF dan Dubbo.

    1. Kemas proyek sebelumnya menjadi edas-dubbo-demo-consumer.war dan sebarkan ke Apache Tomcat.

      Penting

      Pastikan port tidak bertabrakan.

    2. Masuk ke konsol konfigurasi registry ringan untuk memeriksa apakah konsumen layanan Dubbo terdaftar.

      Jika layanan konsumen terdaftar muncul di konsol, layanan tersebut telah terdaftar.

    3. Buka http://localhost:8280/edas-dubbo-demo-consumer/index.htm:

      curl http://localhost:8280/edas-dubbo-demo-consumer/index.htm
    4. Periksa keluaran standar Apache Tomcat pada klien HSF.

      Jika keluarannya mirip dengan informasi berikut, konsumen layanan Dubbo telah mengonsumsi layanan HSF dan Dubbo.

      Diterima: Hello dubbo, respons dari penyedia dubbo: 192.168.XX.XX:20880
      Diterima: Hello dubbo, respons dari penyedia dubbo: 192.168.XX.XX:20880
      Diterima: Hello dubbo, respons dari penyedia hsf: /192.168.XX.XX:12202
      Diterima: Hello dubbo, respons dari penyedia hsf: /192.168.XX.XX:12202
      Diterima: Hello dubbo, respons dari penyedia dubbo: 192.168.XX.XX:20880
      Diterima: Hello dubbo, respons dari penyedia hsf: /192.168.XX.XX:12202
      Diterima: Hello dubbo, respons dari penyedia hsf: /192.168.XX.XX:12202
      Diterima: Hello dubbo, respons dari penyedia dubbo: 192.168.XX.XX:20880
      Diterima: Hello dubbo, respons dari penyedia dubbo: 192.168.XX.XX:20880
      Diterima: Hello dubbo, respons dari penyedia hsf: /192.168.XX.XX:12202
      Diterima: Hello dubbo, respons dari penyedia hsf: /192.168.XX.XX:12202
      Diterima: Hello dubbo, respons dari penyedia dubbo: 192.168.XX.XX:20880
      Diterima: Hello dubbo, respons dari penyedia dubbo: 192.168.XX.XX:20880

Menyebarkan aplikasi ke EDAS dan memverifikasi hasilnya

Dalam topik ini, penyebaran di kluster Elastic Compute Service (ECS) digunakan sebagai contoh. Di EDAS, buat empat aplikasi berikut:

  • edas-dubbo-demo-consumer adalah aplikasi konsumen layanan setelah migrasi. Lingkungan runtime-nya adalah Apache Tomcat 7.0.91.

  • edas-dubbo-demo-provider adalah aplikasi penyedia layanan setelah migrasi. Lingkungan runtime-nya adalah Apache Tomcat 7.0.91.

  • edas-hsf-demo-consumer adalah aplikasi konsumen layanan sebelum migrasi. Lingkungan runtime-nya adalah EDAS-Container V3.5.4.

  • edas-hsf-demo-provider adalah aplikasi penyedia layanan sebelum migrasi. Lingkungan runtime-nya adalah EDAS-Container V3.5.4.

  1. Sebarkan empat paket WAR ke empat aplikasi secara terpisah. Untuk informasi lebih lanjut, lihat Menyebarkan aplikasi ke EDAS.

  2. Jalankan perintah berikut untuk memeriksa apakah konsumen layanan edas-hsf-demo-consumer dapat memanggil penyedia layanan HSF dan Dubbo:

    curl http://39.106.XX.XXX:8080/index.htm
  3. Lihat log di keluaran standar Ali-Tomcat dari aplikasi edas-hsf-demo-consumer, seperti /home/admin/taobao-tomcat-production-7.0.XX.X/logs/catalina.out.

    Jika keluarannya mirip dengan informasi berikut, konsumen layanan HSF telah mengonsumsi layanan HSF dan Dubbo.

  4. Jalankan perintah berikut untuk memeriksa apakah edas-dubbo-demo-consumer dapat memanggil penyedia layanan HSF dan Dubbo.

    curl http://192.168.XX.XX:8080/index.htm
  5. Lihat log di keluaran standar Apache Tomcat dari aplikasi edas-dubbo-demo-consumer, seperti /home/admin/apache-tomcat-7.0.91/logs/catalina.out.

    Jika keluarannya mirip dengan informasi berikut, konsumen layanan Dubbo telah mengonsumsi layanan HSF dan Dubbo.

Pertanyaan yang Sering Diajukan (FAQ)

  • Mengapa saya tidak dapat menemukan alamat penyedia layanan setelah konsumen layanan Dubbo dimulai?

    Deskripsi Masalah

    java.lang.IllegalStateException: Gagal memeriksa status layanan com.xxxx.xxxxx.service.xxxxxConfigService. Tidak ada penyedia yang tersedia untuk layanan HSF/com.xxxxx.xxxxx.service.xxxxxxxxxxService:1.0.0 dari 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 untuk konsumen xxx.xx.xx.xxx menggunakan versi dubbo 2.7.3

    Penyebab Potensial

    Registry secara asinkron mendorong alamat penyedia layanan. Secara default, Dubbo memeriksa apakah alamat penyedia layanan tersedia saat startup. Jika tidak ada alamat yang tersedia, kesalahan ini terjadi.

    Solusi

    Di label <dubbo:reference> Dubbo, tambahkan konfigurasi check="false" berikut:

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

    Setelah konfigurasi ditambahkan, Dubbo tidak akan memeriksa apakah alamat penyedia layanan tersedia saat startup. Namun, jika layanan Dubbo perlu dipanggil dalam kode inisialisasi bisnis, bisnis tersebut mungkin gagal.

  • Mengapa terjadi kesalahan ketika konsumen layanan HSF memanggil layanan Dubbo?

    Deskripsi Masalah

    2019-07-28 23:07:38.005 [WARN ] [cf67433d1e7a44412a518bd190100d176-node401] [NettyServerWorker-6-1] [o.a.d.r.exchange.codec.ExchangeCodec:91] |  [DUBBO] Gagal menyandikan respons: 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]], kirim info bad_response sebagai gantinya, penyebab: Untuk input string: "", versi dubbo: 2.7.3, host saat ini: xxx.xx.xx.xxx
    java.lang.NumberFormatException: Untuk 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)
      ...

    Penyebab Potensial

    Setelah Dubbo diperbarui ke V2.7, HSF tidak kompatibel dengan Dubbo.

    Solusi

    Perbarui EDAS-Container ke V3.5.5. Masalah ini telah diperbaiki di EDAS-Container versi ini di HSF.

  • Mengapa konsumen layanan Dubbo gagal memanggil penyedia layanan HSF?

    Deskripsi Masalah

    java.lang.Exception: [HSF-Provider-192.168.0.46] Log kesalahan: [HSF-Provider] Aplikasi [xxxxxxx-3b6f-42d3-xxxx-0ad2434xxxxx] gagal memverifikasi tanda tangan pemanggil [null] untuk [com.alibaba.edas.DemoService:1.0.0] [sayHello] dari klien [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)

    Penyebab Potensial

    Otentikasi panggilan diaktifkan untuk HSF, tetapi Dubbo tidak mendukung otentikasi ini.

    Solusi

    Tambahkan -DneedAuth=false ke penyedia layanan HSF untuk menonaktifkan otentikasi panggilan.

  • Mengapa konsumen layanan Dubbo gagal memanggil penyedia layanan HSF?

    Deskripsi Masalah

    2019-08-02 17:17:15.187 [WARN ] [cf67433d1e7a44412a518bd190100d176-node401] [NettyClientWorker-4-1] [o.a.d.r.p.dubbo.DecodeableRpcResult:91] | [DUBBO] Dekode hasil rpc gagal: null, versi dubbo: 2.7.3, host saat ini: 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)
        ...

    Penyebab Potensial

    Layanan HSF menyediakan dan bergantung pada versi Hessian Lite yang lebih lama, yang tidak mendukung serialisasi JDK 8 LocalDateTime.

    Solusi

    Perbarui EDAS-Container penyedia layanan HSF ke V3.5.5.