【Ice】【06】新建maven項目user-service 部署方式一:使用IceBox + Ice Registry部署

參考文檔

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.25

IceGrid.Registry.Server.Endpoints=tcp
IceGrid.Registry.Internal.Endpoints=tcp

IceGrid.Registry.Data=/opt/ice_project/data/registry

IceGrid.Registry.PermissionsVerifier=IceGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=IceGrid/NullPermissionsVerifier


IceGrid.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 exception
			System.out.println(e);
		}

	}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章