Tüm Ürünler
Search
Belge Merkezi

Enterprise Distributed Application Service:HSF mimarisinden Dubbo'ya (Ali-Tomcat) uygulama geçişi

Son Güncelleme:Oct 06, 2026

Bu konu, bir uygulamayı HSF çerçevesinden Dubbo çerçevesine geçirmek için Ali-Tomcat'in nasıl kullanılacağını açıklar.

Geçiş yaklaşımları

HSF+EDAS/ kayıt defterinden Dubbo+Nacos kayıt defterine geçiş yapmak için iki yaklaşım vardır:

  • İki aşamalı geçiş

    1. HSF+EDAS/ kayıt defterinden Dubbo+EDAS/ kayıt defterine geçiş yapın.

    2. EDAS/ kayıt defterini Nacos'a taşıyın.

    Avantaj: Bu yaklaşım daha kararlıdır ve kademeli yinelemeler için uygundur. Dezavantaj: Bu yaklaşım iki dağıtım gerektirir.

  • Doğrudan geçiş

    HSF+EDAS/ kayıt defterinden doğrudan Dubbo+Nacos kayıt defterine geçiş yapın.

    HSF şu anda Nacos'u desteklemediğinden bu yaklaşım ek geliştirme çalışması gerektirir.

Uygulamanızı hızlı bir şekilde Dubbo'ya geçirip üretim ortamına dağıtmak istiyorsanız, kararlılığı nedeniyle ilk yaklaşım önerilir. Bu kılavuzda iki aşamalı geçiş detaylandırılmıştır.

Geçiş mimarisi

HSF迁移Dubbo结构图

Bir Dubbo hizmeti hem HSF hem de Dubbo formatlarında kayıt yaptırarak HSF tüketicilerinin bunu keşfetmesine olanak tanır. Benzer şekilde, bir Dubbo tüketicisi her iki formata da abone olarak HSF hizmetlerini keşfedebilir.

Başlamadan önce

Geçiş süreci aşağıdaki bileşenleri gerektirir:

HSF ve Dubbo hizmetlerinin aynı arayüzü uyguladığını varsayalım. Bu arayüz, yalnızca bir arayüz bildirimi içeren ve aşağıdaki dizin yapısına sahip olan edas-demo-interface adlı ayrı bir modülde bulunur:

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

Hizmet sağlayıcısını geçirin

edas-hsf-demo-provider-war HSF uygulamasını geçirdiğinizi varsayalım. Uygulama aşağıdaki dosyaları içerir:

  • pom.xml: Uygulama modülleri arasındaki bağımlılıkları tanımlar.

  • DemoServiceImpl.java: DemoService uygulaması.

  • hsf-provider-beans.xml: HSF için Spring bean tanım dosyası.

  • web.xml: WAR paketi için dağıtım tanımlayıcısı.

edas-hsf-demo-provider-war dizin yapısı aşağıdaki gibidir:

├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │     └── alibaba
│ │ │         └── edas
│ │ │             └── hsf
│ │ │                 └── provider
│ │ │                     └── DemoServiceImpl.java
│ │ ├── resources
│ │ │ └── hsf-provider-beans.xml
│ │ └── webapp
│ │     └── WEB-INF
│ │         └── web.xml
  1. pom.xml dosyasına Dubbo ile ilgili bağımlılıkları ekleyin.

    HSF bağımlılıkları için Spring 4.x veya üzerini kullanın.

    1. HSF istemci bağımlılığını kaldırın.

      <dependency>
                  <groupId>com.alibaba.edas</groupId>
                  <artifactId>edas-sdk</artifactId>
                  <version>1.5.4</version>
      </dependency>
    2. Dubbo ile ilgili bağımlılıkları ekleyin.

      • edas-dubbo-extension: Bu bağımlılık, Dubbo hizmetlerini EDAS/ kayıt defterine kaydeder ve Dubbo hizmetlerinin HSF formatındaki kayıt ve abonelik işlemlerini yönetir. Tam pom.xml dosyası için örnek koda bakın.

      • dubbo: Standart Dubbo bağımlılığı.

      <dependency>
                  <groupId>com.alibaba.edas</groupId>
                  <artifactId>edas-dubbo-extension</artifactId>
                  <version>2.0.6</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 dosyasının adını dubbo-provider-beans.xml olarak değiştirin ve içeriğini güncelleyin.

    Orijinal hsf-provider-beans.xml dosyası aşağıdaki yapılandırmayı içerir:

    <?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" />
        <!-- Provide a service example -->
        <hsf:provider id="demoService" interface="com.alibaba.edas.DemoService"
            ref="itemService" version="1.0.0">
        </hsf:provider>
    </beans>

    dubbo-provider-beans.xml dosyasının içeriğini aşağıdakiyle değiştirin:

    <?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>
    Not
    • Dubbo kayıt defteri adresi edas://127.0.0.1:8080 olarak ayarlanmalıdır. Adres edas ön ekiyle başlamalıdır. IP adresi ve bağlantı noktası yerel geliştirme içindir. Dağıtım sırasında EDAS veya bunları otomatik olarak üretim adresiyle değiştirir.

    • <dubbo:parameter key="hsf.enable" value="true"/> yapılandırmasını ekleyin. Bu, Dubbo hizmetinin hem HSF hem de Dubbo formatlarında kaydedilmesini sağlar ve HSF istemcilerinin hizmeti keşfetmesine olanak tanır.

    • <dubbo:service> etiketini yapılandırırken grup ve sürümü açıkça belirtmeniz gerekir. Grup genellikle HSF ve sürüm 1.0.0 olmalıdır. Aksi takdirde HSF istemcileri hizmeti çağrıyamaz.

  3. web.xml dosyasında hsf-provider-beans.xml dosyasını dubbo-provider-beans.xml ile değiştirin.

    contextConfigLocation parametresindeki dosya adını dubbo-provider-beans.xml olarak değiştirmeniz yeterlidir.

    <!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. Geçişi yerel ortamda doğrulayın.

    Yerel doğrulama, hizmet kaydının doğrulanması ve hizmet tüketicisi çağrılarının doğrulanması olmak üzere iki bölümden oluşur.

    1. Hizmet kaydını doğrulayın.

      1. HSF uygulamasının yerel kayıt defterine kayıt yapabilmesi için hosts dosyanızı (örneğin, /etc/hosts) düzenleyin ve aşağıdaki girişi ekleyin:

        127.0.0.1     jmenv.tbsite.net
      2. hafif yapılandırma ve kayıt defteri merkezini

      3. edas-hsf-demo-provider-war projesini bir WAR paketine dönüştürmek için mvn clean package komutunu çalıştırın.

        Elde edilen paket, uygulama projesinin target dizininde bulunur.

      4. edas-hsf-demo-provider.war dosyasını Ali-Tomcat'e ve edas-dubbo-demo-provider.war dosyasını Apache Tomcat'e dağıtın.

        Not

        İki Tomcat örneğinin bağlantı noktaları çakışabilir. Her bir Tomcat örneğinin conf/server.xml dosyasında 8005 ve 8080 numaralı bağlantı noktalarını arayın ve çakışmayan değerlerle değiştirin.

      5. Hafif yapılandırma ve kayıt defteri merkezine http://127.0.0.1:8080/#/serviceManagement adresinden erişin ve com.alibaba.edas.DemoService:1.0.0 hizmetini kontrol edin.

        Hizmet kayıtlıysa ve örnek sayısı 2 ise, bu durum hem Dubbo hem de HSF hizmetlerinin tek bir HSF formatlı hizmet olarak kaydedildiğini gösterir.

    2. Hizmet tüketicisi çağrılarını doğrulayın.

      Tüketicilerin geçişi yapılan hizmet sağlayıcısını çağırabildiğini doğrulamak için şu adımları izleyin.

      1. Test amacıyla, aşağıdaki dizin yapısına sahip edas-hsf-demo-consumer-war gibi bir HSF hizmet tüketicisi hazırlayın:

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

        Bu servlet, bir HTTP isteği alındığında bir HSF çağrısı başlatır.

        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 komutunu çalıştırarak edas-hsf-demo-consumer-war projesini edas-hsf-demo-consumer.war olarak derleyin ve başka bir Ali-Tomcat örneğine dağıtın. Bağlantı noktası çakışmalarından kaçındığınızdan emin olun.

      3. Hafif yapılandırma ve kayıt defteri merkezi konsolunda oturum açın.

        Konsolda HSF hizmet tüketicisine ait verilerin görüntülenmemesi normaldir.

      4. Ali-Tomcat'i başlattıktan sonra aşağıdaki URL'ye erişin:

        curl http://localhost:8280/edas-hsf-demo-consumer/index.htm
      5. edas-hsf-demo-consumer.war dosyasını çalıştıran Ali-Tomcat örneğinin standart çıktısını gözlemleyin.

        Aşağıdakine benzer bir çıktı görürseniz, HSF istemcisinin hem Dubbo hem de HSF hizmetlerini çağırdığı doğrulanmış olur.

        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

Hizmet tüketicisini geçirin

Bu bölümde edas-hsf-demo-consumer-war uygulamasının edas-dubbo-demo-consumer-war uygulamasına nasıl geçirileceği anlatılmaktadır.

  1. pom.xml dosyasına Dubbo ile ilgili bağımlılıkları ekleyin.

    Hizmet tüketicisini geçirme işlemi, hizmet sağlayıcısını geçirme işlemiyle aynıdır. dubbo ve edas-dubbo-extension bağımlılıklarını ekleyin ve edas-sdk bağımlılığını kaldırın. Ayrıntılar için "Hizmet sağlayıcısını geçirin" bölümündeki pom.xml dosyasına Dubbo ile ilgili bağımlılıkları ekleyin adımına bakın.

  2. hsf-consumer-beans.xml dosyasının adını dubbo-consumer-beans.xml olarak değiştirin ve içeriğini güncelleyin.

    Orijinal hsf-consumer-beans.xml dosyası aşağıdaki gibi yapılandırılmıştır:

    <?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">
        <hsf:consumer id="demoService" interface="com.alibaba.edas.DemoService" version="1.0.0">
        </hsf:consumer>
    </beans>

    dubbo-consumer-beans.xml dosyasının içeriğini aşağıdakiyle değiştirin:

    <?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>
    Not
    • Dubbo kayıt defteri adresi edas:// ile başlamalıdır.

    • <dubbo:service> etiketini yapılandırırken group ve version değerlerini belirtmeniz gerekir. group ve version değerleri hizmet sağlayıcısıyla aynı olmalıdır. Varsayılan olarak group değeri HSF, version değeri ise 1.0.0'dır.

    • check="false" yapılandırmasını ekleyin. Bu, bir sağlayıcı kullanılamadığında hizmet tüketicisi uygulamasının başlangıçta başarısız olmasını engeller.

    • <dubbo:parameter key="hsf.enable" value="true"/> yapılandırmasını ekleyin. Bu, hizmet tüketicisinin hizmet sağlayıcıdan veri almasına olanak tanır.

  3. web.xml dosyasında hsf-consumer-beans.xml dosyasını dubbo-consumer-beans.xml ile değiştirin.

  4. Geçişi yerel ortamda doğrulayın.

    Yerel doğrulama, hizmetin hafif yapılandırma ve kayıt defteri merkezine kayıtlı olduğunun doğrulanması ve tüketicinin hem HSF hem de Dubbo hizmetlerini çağırabildiğinin doğrulanması olmak üzere iki bölümden oluşur.

    1. Projeyi edas-dubbo-demo-consumer.war olarak paketleyin ve Apache Tomcat'e dağıtın.

      Önemli

      Bağlantı noktası çakışmalarından kaçının.

    2. Dubbo hizmet tüketicisinin kayıtlı olup olmadığını kontrol etmek için hafif yapılandırma ve kayıt defteri merkezi konsolunda oturum açın.

      Konsolda Service List sayfasına gidin. -dubbo-com.alibaba.edas.DemoService-consumers hizmetinin göründüğünü ve Healthy Instance Count değerinin 1 olduğunu onaylayın. Bu, Dubbo hizmet tüketicisinin Nacos'a başarıyla kaydedildiğini gösterir.

    3. http://localhost:8280/edas-dubbo-demo-consumer/index.htm adresine erişin.

      curl http://localhost:8280/edas-dubbo-demo-consumer/index.htm
    4. İstemcinin Apache Tomcat standart çıktısını gözlemleyin.

      Aşağıdakine benzer bir çıktı görürseniz, Dubbo hizmet tüketicisinin hem HSF hem de Dubbo hizmetlerini çağırdığı doğrulanmış olur.

      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 veya üzerinde dağıtma ve doğrulama

Bu konuda EDAS ECS kümesi örnek olarak kullanılmıştır ancak süreç SAE için de benzerdir. Geçişi doğrulamak için aşağıdaki dört uygulamayı oluşturup dağıtın:

  • edas-dubbo-demo-consumer: Geçişi yapılan hizmet tüketicisi uygulaması. Çalışma zamanı ortamı: Apache Tomcat 7.0.91.

  • edas-dubbo-demo-provider: Geçişi yapılan hizmet sağlayıcısı uygulaması. Çalışma zamanı ortamı: Apache Tomcat 7.0.91.

  • edas-hsf-demo-consumer: Geçiş öncesi hizmet tüketicisi uygulaması. Çalışma zamanı ortamı: EDAS Container v3.5.4.

  • edas-hsf-demo-provider: Geçiş öncesi hizmet sağlayıcısı uygulaması. Çalışma zamanı ortamı: EDAS Container v3.5.4.

  1. Dört WAR paketini ilgili uygulamalara dağıtın. Talimatlar için bir uygulamayı EDAS'a dağıtma veya konularına bakın.

  2. edas-hsf-demo-consumer uygulamasının hem HSF hem de Dubbo hizmet sağlayıcılarını çağırabildiğini test etmek için aşağıdaki komutu çalıştırın.

    curl http://39.106.XX.XXX:8080/index.htm
  3. edas-hsf-demo-consumer uygulamasına ait Ali-Tomcat örneğinin standart çıktısındaki günlükleri kontrol edin; örneğin, /home/admin/taobao-tomcat-production-7.0.XX.X/logs/catalina.out.

    Aşağıdakine benzer bir çıktı görürseniz, HSF hizmet tüketicisinin hem HSF hem de Dubbo hizmetlerini çağırdığı doğrulanmış olur.

    2019-07-18 09:58:03.137 org.springframework.web.context.ContextLoader initWebApplicationContext
    INFO: Root WebApplicationContext: initialization completed in 5187 ms
    2019-07-18 09:58:03.214 org.apache.catalina.startup.HostConfig deployDescriptor
    INFO: Deployment of configuration descriptor /home/admin/taobao-tomcat-production-7.0.59.3/conf/Catalina/localhost/ROOT.xml has finished in 14,445 ms
    2019-07-18 09:58:03.226 org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["http-bio-8080"]
    2019-07-18 09:58:03.275 org.apache.catalina.startup.Catalina start
    INFO: Server startup in 14574 ms
    Received: Hello hsf, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello hsf, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello hsf, response from hsf provider: /192.168.xxx.xxx:35676
    Received: Hello hsf, response from hsf provider: /192.168.xxx.xxx:35676
    Received: Hello hsf, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello hsf, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello hsf, response from hsf provider: /192.168.xxx.xxx:35676
    Received: Hello hsf, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello hsf, response from hsf provider: /192.168.xxx.xxx:35676
    Received: Hello hsf, response from hsf provider: /192.168.xxx.xxx:35676
    Received: Hello hsf, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello hsf, response from hsf provider: /192.168.xxx.xxx:35676
    Received: Hello hsf, response from hsf provider: /192.168.xxx.xxx:35676
    Received: Hello hsf, response from dubbo provider: 192.168.xxx.xxx:20880
  4. edas-dubbo-demo-consumer uygulamasının hem HSF hem de Dubbo sağlayıcılarını çağırabildiğini test etmek için aşağıdaki komutu çalıştırın.

    curl http://192.168.XX.XX:8080/index.htm
  5. edas-dubbo-demo-consumer uygulamasına ait Apache Tomcat örneğinin standart çıktısındaki günlükleri kontrol edin; örneğin, /home/admin/apache-tomcat-7.0.91/logs/catalina.out.

    Aşağıdakine benzer bir çıktı görürseniz, Dubbo hizmet tüketicisinin hem HSF hem de Dubbo hizmetlerini çağırdığı doğrulanmış olur.

    Received: Hello dubbo, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello dubbo, response from hsf provider: /192.168.xxx.xxx:12200
    Received: Hello dubbo, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello dubbo, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello dubbo, response from hsf provider: /192.168.xxx.xxx:12200
    Received: Hello dubbo, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello dubbo, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello dubbo, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello dubbo, response from hsf provider: /192.168.xxx.xxx:12200
    Received: Hello dubbo, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello dubbo, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello dubbo, response from dubbo provider: 192.168.xxx.xxx:20880
    Received: Hello dubbo, response from hsf provider: /192.168.xxx.xxx:12200
    Received: Hello dubbo, response from hsf provider: /192.168.xxx.xxx:12200
    Received: Hello dubbo, response from hsf provider: /192.168.xxx.xxx:12200

SSS

  • Bir Dubbo hizmet tüketicisi başlatılamıyor ve bir hizmet sağlayıcısı bulamadığını bildiriyor.

    Belirti

    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

    Olası neden

    Sağlayıcı adresleri kayıt defterinden eşzamansız olarak gönderilir. Başlangıç sırasında Dubbo varsayılan olarak sağlayıcı adreslerinin kullanılabilir olup olmadığını kontrol eder. Hiçbiri mevcut değilse Dubbo bu özel durumu fırlatır.

    Çözüm

    Dubbo'daki <dubbo:reference> etiketine check="false" yapılandırmasını ekleyin:

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

    Bu parametre, Dubbo'nun başlangıç sırasında kullanılabilir bir sağlayıcı adresi olup olmadığını kontrol etmesini engeller. Ancak uygulamanızın başlatma mantığı bir Dubbo hizmetini çağırmayı gerektiriyorsa iş mantığı başarısız olabilir.

  • Bir HSF hizmet tüketicisi bir Dubbo hizmetini çağırırken başarısız oluyor.

    Belirti

    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)

    Olası neden

    Dubbo'nun 2.7 sürümüne yükseltilmesi, HSF ile protokol uyumluluğu sorununa neden olabilir.

    Çözüm

    EDAS Container'ı V3.5.5 sürümüne yükseltin. HSF'nin bu sürümü sorunu çözer.

  • Bir Dubbo hizmet tüketicisi bir HSF hizmet sağlayıcısını çağırırken başarısız oluyor.

    Belirti

    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)

    Olası neden

    HSF'te çağrı kimlik doğrulaması etkinleştirilmiştir ancak Dubbo şu anda bu özelliği desteklememektedir.

    Çözüm

    HSF hizmet sağlayıcısında, çağrı kimlik doğrulamasını devre dışı bırakmak için -DneedAuth=false parametresini ekleyin.

  • Bir Dubbo hizmet tüketicisi, seri hale getirme hatası nedeniyle bir HSF hizmet sağlayıcısını çağırırken başarısız oluyor.

    Belirti

    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)
        ...(The recursive call above is repeated multiple times and is omitted)

    Olası neden

    HSF hizmet sağlayıcısı, JDK 8 LocalDateTime nesnelerinin seri hale getirilmesini desteklemeyen eski bir hessian-lite sürümü kullanmaktadır.

    Çözüm

    HSF hizmet sağlayıcısının EDAS Container sürümünü v3.5.5'e yükseltin.