参考文档

https://blog.csdn.net/u011784767/article/details/74539644

https://doc.zeroc.com/ice/3.6/ice-services/icegrid/getting-started-with-icegrid

在上一章的基础上学习本章

https://blog.csdn.net/huiyanshizhen21/article/details/106455643

1.只使用icebox的问题

只使用IceBox组件来设计和启动Ice服务,客户端必须将服务端的EndPoint写死到代码中。

2.解决方法

Ice设计了服务注册表Registry组件,这是一个以二进制文件形式存储运行期Ice服务注册信息的独立进程,
作为服务的metadata存储数据中心,以供客户端查询。

依托Registry的功能,Ice服务实现了Service Locator组件,这是一个标准的Ice Object服务对象,
我们可以在自己的服务端调用这个寻址服务,从而解决客户端寻址的问题。

3.Service Locator组件

Service Locator组件实现了两个非常实用和重要的功能:

Ⅰ:自动实现了多种可选择的负载均衡算法,客户端代码无需自己再实现
Ⅱ:服务部署位置和部署数量发送变化之后,客户端无需重启,自动感知和适应

4.启动icegridregistry

4.1配置文件

安装ice后默认在/etc下有个icegridregistry.conf可以参考下

mkdir -p /opt/ice_project/config  /opt/ice_project/data/registry
cd /opt/ice_project/config && vim icegridregistry.conf
IceGrid.Registry.Client.Endpoints=tcp -p 4061 -h 192.168.1.25IceGrid.Registry.Server.Endpoints=tcp
IceGrid.Registry.Internal.Endpoints=tcpIceGrid.Registry.Data=/opt/ice_project/data/registryIceGrid.Registry.PermissionsVerifier=IceGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=IceGrid/NullPermissionsVerifierIceGrid.Registry.DynamicRegistration=1

4.2 启动icegridregistry

nohup icegridregistry --Ice.Config=/opt/ice_project/config/icegridregistry.conf >/dev/null 2>&1 &

5.服务端代码不改变

6.修改icebox的配置,添加

#Ice Registry的协议 地址 端口
Ice.Default.Locator=DemoIceGrid/Locator:tcp -h 192.168.1.25 -p 4061
#配置UserServiceServer的适配器Id
UserServiceServer.AdapterId=UserServiceServerAdapter

7.通过配置服务的AdapterId,我们就可以使用

service@adapterId的间接代理的EndPoint方式来寻址服务了。

8.启动icebox

./startIceServer.sh &

9.开端口4061

sudo firewall-cmd --zone=public --add-port=4061/tcp --permanent
systemctl restart firewalld

10.修改客户端代码调用

package com.yinzhen.demo.ice.userservice;import com.yinzhen.demo.ice.user.UserInfo;
import com.yinzhen.demo.ice.user.UserServicePrx;
import com.yinzhen.demo.ice.user.UserServicePrxHelper;public class UserServiceClient {public static void main(String[] args) {Ice.Communicator communicator = null;try {String[] initParams = new String[]{"--Ice.Default.Locator=DemoIceGrid/Locator:tcp -h 192.168.1.25 -p 4061"};// 初始化通信容器communicator = Ice.Util.initialize(initParams);//这里使用service@adapterId的形式寻址Ice.ObjectPrx op = communicator.stringToProxy("UserServiceServer@UserServiceServerAdapter");// 检查通用客户端代理op 是不是queryServer对象标识符所关联的ice对象的代理UserServicePrx userServicePrx = UserServicePrxHelper.checkedCast(op);if(userServicePrx == null){throw new Exception("qp == null");}UserInfo userInfo = userServicePrx.getUserInfoById("id");if(userInfo == null){throw new Exception("userInfo == null");}// 输出服务端返回结果System.out.println(userInfo.remark);} catch (Exception e) {// TODO: handle exceptionSystem.out.println(e);}}}

【Ice】【06】新建maven项目user-service 部署方式一:使用IceBox + Ice Registry部署相关推荐

  1. Eclipse下新建Maven项目、自动打依赖jar包

    当我们无法从本地仓库找到需要的构件的时候,就会从远程仓库下载构件至本地仓库.一般地,对于每个人来说,书房只有一个,但外面的书店有很多,类似第,对于Maven来说,每个用户只有一个本地仓库,但可以配置访 ...

  2. Eclipse新建Maven项目没有web.xml

    场景 在使用Eclipse新建Maven项目后,并没有web.xml 解决 右击项目--properties--Project Facets 如果Dynamic Web Module 没有勾选,请勾选 ...

  3. Eclipse中新建Maven项目没有java以及test目录

    场景 用Eclipse第一次新建Maven项目,采用Artifact Id为maven-archetype-webapp时, 项目目录下没有java以及test目录. 解决 右击项目--propert ...

  4. 设置eclipse新建maven项目默认使用jdk1.8

    设置eclipse新建maven项目默认使用jdk1.8 1.打开maven的配置文件settings.xml(apache\apache-maven-3.6.0\conf\settings.xml) ...

  5. eclipse新建maven项目(2)

    本篇博文是继续之前的博文eclipse新建maven项目(1),那篇博文不在随笔在文章中. 首先按照之前那篇博文进行创建maven项目操作,一系列操作下来之后发现刷新项目后会报错: 别急哈,可以解决. ...

  6. myecplise新建Maven项目Filter选什么,使用myeclipse建立maven项目

    myecplise新建Maven项目Filter选什么 使用myeclipse建立maven项目   1 2 3 4 5 6 7 分步阅读 maven是管理项目的,myeclipse是编写代码的.第一 ...

  7. IDEA配置好maven后新建maven项目一直build失败的解决方法

    IDEA配置好maven后新建maven项目一直build失败的解决方法 参考文章: (1)IDEA配置好maven后新建maven项目一直build失败的解决方法 (2)https://www.cn ...

  8. idea新建maven项目没有src目录的操作方法

    方法一:设置idear的maven运行参数 或者加archetypeCatalog=internal 方法二:在新建maven项目时候设置archetypeCatalog=internal,这种方式每 ...

  9. eclipse上新建Maven项目报错及解决

    Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of ...

最新文章

  1. 避免表格table被撑开变形的CSS代码实例
  2. 单片机检测stc没反应_stc单片机无法烧录,一直正在检测目标单片机怎么办?
  3. java io流 教程_Java基础教程:IO流与文件基础
  4. P1297-[国家集训队]单选错位【期望概率】
  5. 二维数组的遍历之查漏补缺
  6. 优酷《追光吧!》正式开播 风度、实力成关键词
  7. 机器学习实践指南(四)—— 算法的细节
  8. PHP--字符串合并与分割
  9. win32com excel转pdf
  10. 51单片机学习历程——建立新的工程
  11. 大叔配萝莉/正太的电影一般都不会差。。。
  12. 使用unity3d 接入anySDK的总结1
  13. python:panda
  14. Mac上显示实时网速小工具
  15. python3安装setuptools步骤_简单python2.7.3安装setuptools模块
  16. 仿照QQ的左右滑动切换界面的效果
  17. 操作Excel之“=VLOOKUP(V2,Sheet2!J:K,2)”公式解读
  18. (2022-2027)全球及中国乳酸十六烷基酯行业供需现状及前景规划分析报告
  19. Windows上免费epub阅读器推荐
  20. Python进行Excel的处理

热门文章

  1. python一个文本循环输出_Python实现动态循环输出文字功能
  2. 如何设计一个循环队列
  3. 嵌入式Linux设备驱动程序开发指南14(Linux设备驱动使用DMA)——读书笔记
  4. Makefile的书写规则以及/usr/bin/ld: cannot find -lc
  5. micro focus cobol 文件大小限制
  6. 使用 Luckysheet 可实现 Web 的 Excel
  7. 云手机虚拟服务器地址是什么,云手机怎么搭建服务器地址
  8. c语言课程设计礼花的绽放,计算机技术基础(c语言)课程设计 制作节日礼花.doc
  9. 旗舰手机割不动年轻人了,纷纷降价千元贱卖,苹果也未能幸免
  10. ar9271无线网卡驱动 linux,虚拟机 ubuntu 安装 Mercury MW150U 无线网卡(AR9271芯片组)