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ş
HSF+EDAS/ kayıt defterinden Dubbo+EDAS/ kayıt defterine geçiş yapın.
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

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:
EDAS Container V3.5.5
edas-dubbo-extension 2.0.6
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
-
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.
-
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> -
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>
-
-
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>NotDubbo kayıt defteri adresi
edas://127.0.0.1:8080olarak ayarlanmalıdır. Adresedasö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 genellikleHSFve sürüm1.0.0olmalıdır. Aksi takdirde HSF istemcileri hizmeti çağrıyamaz.
-
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> -
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.
-
Hizmet kaydını doğrulayın.
-
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 -
edas-hsf-demo-provider-war projesini bir WAR paketine dönüştürmek için
mvn clean packagekomutunu çalıştırın.Elde edilen paket, uygulama projesinin target dizininde bulunur.
-
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.
-
Hafif yapılandırma ve kayıt defteri merkezine
http://127.0.0.1:8080/#/serviceManagementadresinden 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.
-
-
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.
-
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.xmlBu 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); } } 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.
-
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.
-
Ali-Tomcat'i başlattıktan sonra aşağıdaki URL'ye erişin:
curl http://localhost:8280/edas-hsf-demo-consumer/index.htm -
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.
-
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.
-
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>NotDubbo kayıt defteri adresi
edas://ile başlamalıdır.<dubbo:service>etiketini yapılandırırkengroupveversiondeğerlerini belirtmeniz gerekir.groupveversiondeğerleri hizmet sağlayıcısıyla aynı olmalıdır. Varsayılan olarakgroupdeğeri HSF,versiondeğ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.
web.xml dosyasında hsf-consumer-beans.xml dosyasını dubbo-consumer-beans.xml ile değiştirin.
-
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.
-
Projeyi edas-dubbo-demo-consumer.war olarak paketleyin ve Apache Tomcat'e dağıtın.
ÖnemliBağlantı noktası çakışmalarından kaçının.
-
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-consumershizmetinin 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. -
http://localhost:8280/edas-dubbo-demo-consumer/index.htm adresine erişin.
curl http://localhost:8280/edas-dubbo-demo-consumer/index.htm -
İ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.
Dört WAR paketini ilgili uygulamalara dağıtın. Talimatlar için bir uygulamayı EDAS'a dağıtma veya konularına bakın.
-
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 -
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 -
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 -
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®ister.ip=xxx.xx.xx.xxx&release=2.7.3&revision=1.0.1-SNAPSHOT&side=consumer&sticky=false&timeout=2000×tamp=1564242421194&version=1.0.0 to the consumer xxx.xx.xx.xxx use dubbo version 2.7.3Olası 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>etiketinecheck="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=falseparametresini 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.