五、ICE服务——注册中心与代理服务、ice客户端(注册中心配置与版本号)ice服务端(服务发布与版本号)注意事项、相关问题

五、ICE服务——注册中心与代理服务、ice客户端(注册中心配置与版本号)ice服务端(服务发布与版本号)注意事项、相关问题,第1张

五、ICE服务——注册中心与代理服务、ice客户端(注册中心配置与版本号)ice服务端(服务发布与版本号)注意事项、相关问题

                                                IceBox

IceBox 是一种简单的应用服务器,可用于协调许多应用组件的启动和停

止。简单理解,就相当于tomcat,我们只需要关注业务接口实现,用一个

配置文件定义需要加载的服务列表、启动参数等信息

                                                 Node、Registry 、 IceGrid

Node: 服务节点,管理一个节点上挂载的IceBox,采集主机底层负载信息

Registry:注册中心,实现各服务信息注册管理,实现多策略调用负载,监控节服务的状态变化,实时切换主从

IceGrid:用来管理node和registry的工具,支持命令行,有api服务,也有GUI界面

                                                 Glacier2

Glacier 是 Ice 防火墙服务:它能让客户与服务器通过防火墙安全地进行

通信,且又不牺牲安全性。客户-服务器之间的通信数据使用公钥证书进

行了完全的加密,并且是双向的。 Glacier2支持相互认证,以及安全的会话

管理。

                                                         服务端

 服务端启动

                                                                客户端 

iceclient.properties  配置规则(1) 

一、注册中心配置与默认版本配置

--Ice.Default.Locator=DemoIceGrid/Locator:tcp -h ice_registry_node1 -p 4062:tcp -h ice_registry_node2 -p 4062

--Ice.Default.OldRegistry=DemoIceGrid/Locator:tcp -h ice_registry_old_node1 -p 4062:tcp -h ice_registry_old_node2 -p 4062

idleTimeOutSeconds=60000

app.version=-uhome-v1

二、接口指定版本

tddl.sequences.SequenceService=

tddl.sequences.OrderSequenceService=-V1

segi.datacachesvr.queryCustomInfo.CCustomInfoI=-v1

segi.datacachesvr.queryInfo.CCBuildI=-v1

segi.datacachesvr.queryInfo.CCommunityI=-v1

iceclient.properties  配置规则(2) 

三、接口指定服务地址(支持注册中心或单接口服务地址)

#AdminUserServiceBox

segi.common.adminuser.AdminUserServicePrx=DemoIceGrid/Locator:tcp -h ice_registry_old_node1 -p 4062:tcp -h ice_registry_old_node2 -p 4062:tcp -h ice_registry_old_node3 -p 4062:tcp -h ice_registry_segi_node1 -p 4062:tcp -h ice_registry_segi_node2 -p 4062

segi.common.adminuser.curd.CurdAdminUserServicePrx=OldRegistry

四、Glacier2配置

--Ice.Default.Glacier2Router=Glacier2-SSL/router:ssl -h nginx_to_internet.segi -p 5064

IceSSL.DefaultDir.Glacier2Router=/public/uhome/ice/message-push/ca

IceSSL.Keystore.Glacier2Router=client114.jks

IceSSL.Password.Glacier2Router=123456

Ice.RetryIntervals=-1

Ice.Plugin.IceSSL=IceSSL.PluginFactory

Ice.Trace.Network=0

IceSSL.VerifyPeer=0

IceSSL.Trace.Security=1

IceSSL.KeystoreType.Glacier2Router=JKS

segi.common.authuser.AuthUserServicePrx=Glacier2Router

segi.common.user.mq.UserMqServicePrx=Glacier2Router

segi.common.push.message.writeMessage.WriteMessageApiServicePrx=Glacier2Router

com.segi.uhomecp.pay.wx.WxPayServicePrx=Glacier2Router

客户端调用工具类 IceClientUtil 

• private static void initLocator()

初始化工具类,加载iceclient.properties服务配置。应用启动后初次调用接口时会执行此方法

• public static Ice.Communicator getIceCommunictor(String clsName)

获取服务通信器,每个接口会创建一个通讯器(为了支持多注册中心),缓存在静态map中。通信器中存储了各接口链接的服务地址

• private static ObjectPrx createIceProxy(Class serviceCls)

获取接口代理,从通讯器中通过传入的接口名称获取对象代理。返回的对象代理中包含了注册中心负载均衡后下发的其中一个节点路径

• public static T getServicePrxByClass(Class serviceCls)

客户端调用服务接口入口,传入需要调用的接口类,返回对象代理。

• Ice.UnknownLocalException、 Ice::ObjectNotExistException、Ice.OperationNotExistException、Ice.UnmarshalOutOfBoundsException

错误信息:

[12 16:06:18,635 ERROR] [http-nio-11040-exec-3] rest.PublicInfoRest -

Ice.UnknownLocalException

    unknown = "Ice::NoEndpointException

Ice.OperationNotExistException

    id.name = "segi.servcieOrder.orderqueryserver.OrderQuery-gamma-v1"

    id.category = ""

    facet = ""

    operation = "getOrderSubmitTrackDetail"

常见异常:

Ice.UnmarshalOutOfBoundsException

    reason = ""

        at IceInternal.BasicStream.readAndCheckSeqSize(BasicStream.java:691)

        at segi.servcieOrder.userScoreslsHelper.read(userScoreslsHelper.java:46)

错误原因:从以下几个方面检查

     1. client, server 使用的slice编译的对象不一致。

    2. 注册服务配置错误、接口调用版本不对,等

    3. 服务中心没有加载正确的启动类,启动类冲突

    4. 能够找到相应的对象适配器 , 但是该对象适配器中无法找到相应的对象;通常是服务中心没有加载正确的启动类,启动类冲突

 常见异常:

• Ice::ConnectionLostException、 Ice::ConnectTimeoutException

错误描述:连接突然断开 ( 比如对方因为段错误而程序停止 , 或者在连接过程中正常关闭 ) : 发生在使用代理调用接口的时候 ( 连接丢失 )、链接超时,注册中心地址或接口地址配置错误

错误信息:

[11 15:20:11,551 DEBUG] [orderServiceQueryBox1-orderServiceQuery-Ice.ThreadPool.Server-270] orderServiceQueryBox1-orderServiceQuery - Network closed tcp connection

local address = 192.168.1.11:24800

remote address = 192.168.2.38:53836

Ice.ConnectionLostException

常见原因:

1.  已经建立连接的对方突然断开、通常对方服务重启或core机

2.  客户端存在双网卡,注册中心采集节点地址时,用了外网地址,导致调用不通,可配置时制定使用ip

常见异常:

• Ice.NoEndpointException

获取不到调用接口地址、或者接口服务调用不通

错误信息:

常见原因:

1. 注册中心有这个接口配置,但是提供这个接口服务未启动

2. 请求版本与服务注册版本不一致(客户端版本、注册中心配置版本、服务器启动时配置版本)需三方一致

3. 客户端使用的对象描述与服务端的对象描述不一致(jar包版本不匹配)

注意事项: 

• Eclipse (自动编译)下配置使用 #include

在eclipse 下如果你引用其他的slice文件,还需要做一件事情,就是要把include路径增加进去。项目右键->属性->Slice2Java Properties->在tab Options里增加Location of Include Files

• pom.xml 增加编译代码

• • • linux环境slice2java解析ice文件,注释不能在代码后面,否则编译会被忽略,或编译报错 

  1. 编译完成后丢失属性

  2. 编译报slice语法错误

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5573838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存