Ice系列--Ice Registry(1)

本文介绍IceGrid中服务注册表Registry的配置与使用方法,包括Registry组件的启动配置、客户端和服务端如何通过ServiceLocator进行服务发现及负载均衡。通过具体实例展示了如何实现服务的动态注册与查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇提到IceBox没有地方存储服务的Endpoints信息。为了解决这个问题,诞生了服务注册表Registry组件,是一个以二进制文件形式存储运行期Ice服务注册信息的独立进程,支持主从同步,从节点可以分担查询请求,类似MySql读写分离的功能,以防止单点故障,同时依托registry的功能,Zeroc设计实现了Service Locator服务组件,它是一个标准的Ice Object服务对象,可以在Ice程序中调用这个服务,从而解决服务地址的查询问题。另外,Service Locator服务组件与Ice客户端Runtime框架结合,实现了自动透明的服务调用均衡负载功能。

(1)registry.cfg

#registry configfor icegrid

IceGrid.Registry.Client.Endpoints=tcp -p 7061

IceGrid.Registry.Server.Endpoints=tcp

IceGrid.Registry.Internal.Endpoints=tcp

IceGrid.Registry.AdminPermissionsVerifier=IceGrid/NullPermissionsVerifier
# 手动创建
IceGrid.Registry.Data=D:\data1\registry

# 是否允许动态注册,在开发阶段允许
IceGrid.Registry.DynamicRegistration=1

(2) 启动注册表

icegridregistry --Ice.Config=./resources/registry.cfg

(3) 修改config.properties,增加下面几行代码

# 和registry同步
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 7061
#指定AdapterId,就可以使用XX@XX来访问
OnlineBookService.AdapterId = OnlineBookServiceAdapter
SMSService.AdapterId = SMSServiceAdapter

(4) 此时修改Client中的访问代码

(1) OnlineBookService 
Ice.Communicator ic=null;
        String[] initparams = new String[]{"--Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 7061"};
        try{
            //初始化Communicator连接对象,负责处理客户端的连接,可以进行设置,如客户端连接数量
            ic = Ice.Util.initialize(initparams);
            // 客户端代理proxy对象,访问确定的endpoints,返回的对象是广义的
            Ice.ObjectPrx base = ic.stringToProxy("OnlineBookService@OnlineBookServiceAdapter");
// 此时是根据XX@XX来访问的,如果指定一个命名规则,就很方便的查询出具体的endpoints,不用详细给定。

(2)SMSClient
String[] initparams = new String[]{"--Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 7061"};
        try{
            //初始化Communicator连接对象,负责处理客户端的连接,可以进行设置,如客户端连接数量
            ic = Ice.Util.initialize(initparams);
            // 客户端代理proxy对象,访问确定的endpoints,返回的对象是广义的
            Ice.ObjectPrx base = ic.stringToProxy("SMSService@SMSServiceAdapter");

(3)SMSServiceImpl 中的访问OnlineBook代码
Ice.ObjectPrx base =_adapter.getCommunicator().stringToProxy("OnlineBookService@OnlineBookServiceAdapter");

(5) 具体的输出和前面是一样的。
(6) 运行图片
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值