DUBBO 使用问题记录

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

官方ISSUE参考

https://github.com/alibaba/dubbo/issues

 

注册中心ZookeeperRegistry.doSaveProperties warn

2014-10-1419:56:51WARN  [com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry.doSaveProperties(221)]  [DUBBO] Failed to save registry store file, cause: Can not loc

k the registry cache file /homearch/.dubbo/dubbo-registry-192.168.1.109.cache, ignore and retry later, maybe multi java process use the file, please config: dubbo.re

gistry.file=xxx.properties, dubbo version:2.5.3, current host:192.168.1.22

java.io.IOException: Can not lock the registry cache file /homearch/.dubbo/dubbo-registry-192.168.1.109.cache, ignore and retry later, maybe multi java process use t

he file, please config: dubbo.registry.file=xxx.properties

        at com.alibaba.dubbo.registry.support.AbstractRegistry.doSaveProperties(AbstractRegistry.java:193)

        at com.alibaba.dubbo.registry.support.AbstractRegistry$SaveProperties.run(AbstractRegistry.java:150)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

        at java.lang.Thread.run(Thread.java:744)

2014-10-1419:56:51WARN  [com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry.doSaveProperties(221)]  [DUBBO] Failed to save registry store file, cause: Can not loc

k the registry cache file /homearch/.dubbo/dubbo-registry-192.168.1.109.cache, ignore and retry later, maybe multi java process use the file, please config: dubbo.re

gistry.file=xxx.properties, dubbo version:2.5.3, current host:192.168.1.22

java.io.IOException: Can not lock the registry cache file /homearch/.dubbo/dubbo-registry-192.168.1.109.cache, ignore and retry later, maybe multi java process use t

he file, please config: dubbo.registry.file=xxx.properties

        at com.alibaba.dubbo.registry.support.AbstractRegistry.doSaveProperties(AbstractRegistry.java:193)

        at com.alibaba.dubbo.registry.support.AbstractRegistry$SaveProperties.run(AbstractRegistry.java:150)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

        at java.lang.Thread.run(Thread.java:744)

 

原因:

dubbo会默认会在本地缓存注册中心的信息文件,默认路径在//home/[user]/.dubbo/dubbo-registry-192.168.1.109.cache一个服务有多个应用有用到dubbo的时候更新注册中心的本地缓存,在更新本地缓存冲突时,就报了上面的warning;

如何消除这个warn:

在dubbo.properties文件里加入;
dubbo.registry.file=/home/xxx/app/dubbo-registry.propertiesPS:Dubbo将自动加载classpath根目录下的dubbo.properties,可以通过JVM启动参数:-Ddubbo.properties.file=/home/xxx/dubbo.properties 改变缺省配置位置。

影响:

 这个warn可以忽略,只在存储文件的时候才报,存储的文件在AbstractRegistry构造函数里加载;是在启动的时候用

 

错误的服务提供者IP注册到中心

 

hostname解析错误或者可能是使用了VPN,启动了dubbo服务提供者应用,又连了正式环境的注册中心;

 一旦dubbo获取的ip错误后(拨了vpn 本机IP就会有多个),

 这种情况即使提供者服务停掉,目前dubbo没有能力清除这类错误的提供者;

 (需要修改源码测试,需要客户端重新更细包,因为清除动作client端)

 这种情况同样发生在测试的dubbo注册中心;

  

规避方案:

  1. 线上最好直接把10.10.10.10服务器的2181端口,做ip限制,VPN拨上的IP过滤掉(@旭峰,看能不能做到)
  2. 团队人员行为控制;
  3. 拨VPN又需要调试dubbo提供者的应用时,指定DUBBO服务的主机绑定 

发现这种情况的解决方法:

  1. 到dubbo管理后台,禁用错误的服务提供者;

Dubbo主机绑定说明: 

  缺省主机IP查找顺序: 

  • 通过LocalHost.getLocalHost()获取本机地址(hostname做解析,从而获取IP地址的,ping hostname)。
  • 如果是127.*等loopback地址,则扫描各网卡,获取网卡IP。

 

 注册的地址如果获取不正确,比如需要注册公网地址,可以:


1. 可以在/etc/hosts中加入:机器名 公网IP,比如: 

test1 205.182.23.201 

2. 在dubbo.xml中加入主机地址的配置:

<dubbo:protocol host="205.182.23.201">

3. 或在dubbo.properties中加入主机地址的配置:

dubbo.protocol.host=205.182.23.201 或 JAVA_OPTIONS="-Ddubbo.protocol.host=192.168.1.111

怎么样一次访问调用集群中所有节点?

配置下消费者端即可。dubbo已经支持广播调用《broadcast》

<dubbo:referenceid="testservice"interface="xxx.TestService"timeout="8000"cluster="broadcast"/>

spring jar包冲突

我们现在用的spring是3,而dubbo引用的是2.5.6,会造成jar包冲突,需要排除

错误信息:WARN:oejuc.AbstractLifeCycle:FAILED ModelViewController: java.lang.NoSuchFieldError: APPLICATION_CONTEXT_ID_PREFIX

解决办法:<dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>dubbo</artifactId>

            <version>2.4.9</version>

                <exclusions>

                <exclusion>

                    <groupId>org.springframework</groupId>

                    <artifactId>spring</artifactId>

                </exclusion>

            </exclusions>

</dependency>

异步调用问题

  dubbo的异步调用发现个问题

A -----[异步]-->    B   --[同步调用]-->C

B同步dubbo调用C,就会直接返回null

如果B调用C后,下一步还有同步调用D,D返回的会正确;

 

 

服务端开发不注册到中心

开发调试的时候:开发的dubbo服务不要注册到注册中心。不注册的方法如下,建议用1或2
1:启动jvm参数:-Ddubbo.registry.address=192.168.1.109:2183?register=false
2:改properties:<dubbo:registry address="192.168.1.109:2183?register=false"/>  

3:dubbo.xml 配置:<dubbo:registry address="192.168.1.109:2183" register="false" />(上线要改回来)

 

dubbo-monitor-simple

 

里面有个配置dubbo.statistics.directory=${user.home}/monitor/statistics

下面的监控是写文件的,导致服务器的文件过多,几个月下来inode都要满了。

定期清理,或者用dubbo-monitor-x吧,入mysql

 

oschina有一个开源项目:http://git.oschina.net/handu/dubbo-monitor 

 

状态被禁用,管理后台设置无效

不知道什么原因,管理后台看服务是禁用状态,而且启用不成功,感觉是哪里配置写进去的地方写错,具体原因没分析,

解决方法就是去登录zookeeper里手段删除配置节点

zkCli.sh -server 192.168.1.23:2183

 delete /dubbo/xxxx.xxxx.Service/configurators/xxxxxxx

 

DUBBO的回调问题,指导文档是(试用)生产上慎用;

provider <--consumer:  正常调用

provider -->consumer:  回调

例子里,消费的端配置是

<dubbo:reference id="callbackService" interface="com.callback.CallbackService" />

CallbackService callbackService = (CallbackService) context.getBean("callbackService");callbackService.addListener("http://10.20.160.198/wiki/display/dubbo/foo.bar", new CallbackListener(){public void changed(String msg) {System.out.println("callback1:" + msg);}
});

注意点1:初始化的时候,必须调用callbackService.addListener后,provider在调用回调服务,客户端才能收到。

注意点2: provider如果重启了,consumer如果没有重启,这时候如果provider直接进行回调是掉不通的。

如果你重现再consumer里再callbackService.addListener,那就可以了。

 

原因跟回调实现有关,dubbo的回调暴露,CallbackServiceCodec实现consumer的接口暴露。

1.callbackService.addListener

2.-->CallbackServiceCodec(tcp进行callback的编码)、并export回调服务

3.--tcp传输编码-->

4.provider收到编码,CallbackServiceCodec.decode解码知道consumer有回调接口暴露,生成invoker

5.这个时候provider就可以调用invoker了。

 

所以,如果provider重启了,内存里的callbackService 的invoker就没有了。

刚开始看到回调,以为能很好的解决相互依赖,实现provider对consumer的调用,

 

比如场景:

业务系统--依赖-->配置中心。

配置中心后台修改了配置,想下发到业务系统(广播调用)。

用回调有很多问题:1.上面provider重启问题,2.回调没有类似的广播调用。

这种场景大致的dubbo扩张方案(如果谁有解决方案,多谢指导):

看了下如果通过回调机制扩展,有相当大麻烦(按目前对他的理解程度),所以比较简单的

1.provider发布share包时候,直接包consumer暴露成一个provider,就是让他相互依赖。

2.通过注册中心zookeeper,建立监听和通知机制(相对会破坏一点,原来的注册中心定位)

 

管理中心的服务注册信息不同步

重新发布服务后,发现管理中心的服务信息没有更新,包括PID TS,以为应用没更新。

这类问题可以直接登录zookeeper进行查看,

zkCli.sh -server 192.168.1.23:2183

 

扩展点自动激活

dubbo开发文档,自动激活,filter是从ProtocolFilterWrapper 调ExtensionLoader.getActivateExtension


@Activate // 无条件自动激活
public class XxxFilter implements Filter {// ...
}

其实需要加上

<span style="color:#7f9f7f">@Activate(group = {"provider","consumer"})</span>

ExtensionLoader.getActivateExtension

private boolean isMatchGroup(String group, String[] groups) {if (group == null || group.length() == 0) {return true;}if (groups != null && groups.length > 0) {for (String g : groups) {if (group.equals(g)) {return true;}}}return false;
} boolean isMatchGroup(String group, String[] groups) {if (group == null || group.length() == 0) {return true;}if (groups != null && groups.length > 0) {for (String g : groups) {if (group.equals(g)) {return true;}}}return false;
}

 

广播地址绑定失败:Can't assign requested address mac dubbo

<dubbo:registry address="multicast://224.5.6.7:1234"/>registry address="multicast://224.5.6.7:1234"/>

 

This was caused by an IPv6 address being returned from java.net.NetworkInterface.getDefault(). I'm on a Macbook and was using wireless -- p2p0 (used for AirDrop) was returned as the default network interface but my p2p0 only has an IPv6 ether entry [found by running ipconfig].

Two solutions, both of which worked for me (I prefer the first because it works whether you are using a wired or wireless connection)

  1. Start the JVM with -Djava.net.preferIPv4Stack=true. This caused java.net.NetworkInterface.getDefault() to return my vboxnet0 network interface -- not sure what you'll get if you're not running a host-only VM.
  2. Turn off wireless and use a wired connection

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

真格量化学习处理——几个功能小函数

真格这周是学习使用了不少,功能算是很不错,但在做的时候也发现了一个问题: 数据缺失:我在做回测,要求获取每天的delta值,并从中筛选条件值时,报错,显示无数据。不得不使用pass,影响我的回测连贯性。 现在开始讲下,我做的几个功能函数: 算起来,挺烦的,就是各种细节…

软件技术发展的驱动力

软件产品的终极目标是为了实现用户需求从而满足人们的需要。也正是为了不断满足人们的需要使得软件行业不断向前发展。比如&#xff0c;新的算法&#xff08;MPEG-1、MPEG-2、MPEG-4、H.264、……&#xff09;等的出现都在当时为了满足不同的需要而被发明。然而&#xff0c;人们…

The Model Driven Software Network

国外的一个模型驱动软件开发的讨论社区&#xff0c;The Model Driven Software Network这个社区讨论的都是模型驱动开发相关的话题&#xff0c;虽然建立不久&#xff0c;但加入的人越来越多&#xff0c;建立群组的是Mark Dalgarno以下是一些讨论: Textual v Graphical models W…

无敌简单快速的文件服务器sgfs

前言 想要构建一个Linux文件服务器&#xff1f;看看下面几个要求是不是你想要的&#xff1f; 1、只需要单节点部署就够了 2、部署启动简单&#xff0c;下载之后&#xff0c;一键启动&#xff0c;一键关闭 3、不需要任何其他的依赖安装&#xff0c;而且运行时占用内存资源少 4、…

springboot多数据源配置

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 之前在介绍使用JdbcTemplate和Spring-data-jpa时&#xff0c;都使用了单数据源。在单数据源的情况下&#xff0c;Spring Boot的配置非常…

pyhon量化数据处理小细节3---日期格式转换

不同的数据文档&#xff0c;会获得不同日期格式&#xff0c;常见的有str(20200101),datetime(20200101),又或者是2020-01-01&#xff0c;,2020-1-1,20-1-1&#xff0c;20-Apr_20th,2020/01/01,20/01/01等等&#xff0c;总之类型很多。因此需要我们对日期格式进行统一化。这里我…

面向对象和基于对象

面向对象大家都很熟悉&#xff0c;可是基于对象就不一定了。两个听起来好象是同一回事&#xff0c;而事实上它们却千差万别。基于对象是指&#xff1a;我们采用对象封装技术&#xff0c;将数据和操作捆绑在一起&#xff0c;但是并没有合理地使用多态、继承等面向对象技术进行软…

CSS margin 属性简介

CSS margin 属性 设置外边距的最简单的方法就是使用 margin 属性。 margin 属性接受任何长度单位&#xff0c;可以是像素、英寸、毫米或 em。 margin 可以设置为 auto。更常见的做法是为外边距设置长度值。下面的声明在 h1 元素的各个边上设置了 1/4 英寸宽的空白&#xff1a;h…

MVC中使用代码创建数据库(code first +mysql+EF)

1.新建一个mvc项目 2.安装mysql需要的几个文件 EntityFramework、MySql.Data&#xff08;6.9.12&#xff09;和MySql.Data.Entity &#xff08;6.9.12&#xff09; 这里有几点要注意 1.MySql.Data和MySql.Data.Entity 版本必须一致 2.我试用了6.10的版本 要报错 3.我测试没有问…

github 学习使用

博主第一次使用github&#xff0c;所以会将过程全成描述欢迎使用Github注册安装进入仓库&#xff0c;创建、修改、上传文件。强制推送强制覆盖上传文件欢迎使用Github 注册 直接进入github官网&#xff1a;https://github.com 点击sigh up 进行注册 直接填写即可然后验证通过…

Java中9大内置基本数据类型Class实例和数组的Class实例

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、Java中9大内置几本数据类型&#xff1a; 对于对象来说,可以直接使用对象.getClass()或者Class.forName(className);、类名.class都可以…

软件质量管理之困境与对策思考

相信在不少与软件开发相关的企业内&#xff0c;质量管理部门与软件开发部门在日常运作中形成了如下图所示的“哑铃形”组织结构。 开发部门执行质量管理部门所制定的流程&#xff0c;通过提供证据的形式将各种流程执行后的数据反馈给质量管理部门&#xff08;包括缺陷率和各种流…

GDI+用PNG图片做半透明异型窗口

{*******************************************************}{ }{ GDI用PNG图片做半透明异型窗口 }{ }{ 版权所有 (C) 2008 QQ:…

java Spring Boot中使用Swagger2构建API文档

1、添加Swagger2的依赖 在pom.xml中加入Swagger2的依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.2.2</version> </dependency> <dependency><groupId&g…

什么是 FreeMarker

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 转自官方文档&#xff0c;只是记录下官方在线手册地址&#xff1a;http://freemarker.foofun.cn/ FreeMarker 是一款 模板引擎&#xff…

TP函数

U方法用于完成对URL地址的组装&#xff0c;特点在于可以自动根据当前的URL模式和设置生成对应的URL地址&#xff0c;格式为&#xff1a;U(地址,参数,伪静态,是否跳转,显示域名);在模板中使用U方法而不是固定写死URL地址的好处在于&#xff0c;一旦你的环境变化或者参数设置改变…

爬虫——————爬取中金所,深交所,上交所期权数据

先从深交所开始&#xff1a;直接上传源码&#xff1a; from bs4 import BeautifulSoup from lxml import etree import pandas as pd import akshare as ak import datetime import requests import csv from contextlib import closing import time from urllib.request impo…

linux下的C语言开发

linux下的C语言开发&#xff08;开篇&#xff09; 在很多人的眼里&#xff0c;C语言和linux常常是分不开的。这其中的原因很多&#xff0c;其中最重要的一部分我认为是linux本身就是C语言的杰出作品。当然&#xff0c;linux操作系统本身对C语言的支持也是相当到位的。作为一个…

sql语法学习

本人数据库目前使用的是sql&#xff0c;主要是使用python语言&#xff0c;然后用pandas调用&#xff08;真的很方便&#xff09;。所以就总结一下&#xff0c;也为自己以后调用数据查找方便使用。 导入包 from sqlalchemy import create_engine import pymssql连接数据库 con…

C 温故知新 之 指针:数组指针、字符串指针、函数指针

一、数组指针 1.指向数组元素的指针 1、定义&#xff1a;还是那句话通俗的说指针就是地址   数组指针 &#xff1a;数组的起始地址 数组元素指针&#xff1a;数组元素的地址 2、定义一个指向数组元素的指针变量的方法&#xff0c;与之前介绍的指针变量相同。 例如&#…