IceGrid搭建--继承IceBox.Service版

1.总括


2.概念描述



2.node





3.icebox







3.部署



[["java:package:com.hp.tel.ice"]]
module book{
	struct Message{
		string name;
		int type;
		bool valid;
		double price;
		string content;
	};
	interface OnlineBook{
		Message bookTick(Message msg);
	};
};


2.对外java接口


package com;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.hp.tel.ice.book.Message;
import com.hp.tel.ice.book._OnlineBookDisp;

import Ice.Communicator;
import Ice.Current;
import Ice.ObjectAdapter;
import IceBox.Service;

public class OnlineBookImpl extends _OnlineBookDisp implements Service{
	
	private static final long serialVersionUID = -778473257101653957L;
	
	private Logger logger = LoggerFactory.getLogger(this.getClass());
	
	private ObjectAdapter _adapter;
			
	@Override
	public void start(String name, Communicator communicator, String[] args) {
		System.out.println("调用start方法");
		//创建objectAdapter,这里和service同名
		_adapter = communicator.createObjectAdapter(name);
		//创建servant并激活
		Ice.Object object = this;
		_adapter.add(object, communicator.stringToIdentity(name));
		_adapter.activate();
		logger.info("【*******  "+name + "  start ********】");
	}

	@Override
	public void stop() {
		logger.info("【*******  "+this._adapter.getName() + "  stop ********】");
		_adapter.destroy();
	}
	@Override
	public Message bookTick(Message msg, Current __current) {
		logger.info("服务器接收到信息:"+msg);
		System.out.println("hello "+ msg.name);
		msg.name="服务器转化";
		return msg;
	}

}

3.register配置


# The IceGrid instance name.
IceGrid.InstanceName=DemoIceGrid

#客户端通过测Endpoints访问注册表
IceGrid.Registry.Client.Endpoints=tcp -h localhost -p 4061
IceGrid.Registry.Server.Endpoints=tcp -h localhost
IceGrid.Registry.Internal.Endpoints=tcp -h localhost
#持久化文件存放目录,需要手工创建目录
IceGrid.Registry.Data=D:\ice\icegrid_demo\registry
#动态部署
IceGrid.Registry.DynamicRegistration=1

IceGrid.Registry.PermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
IceGrid.Registry.SSLPermissionsVerifier=DemoIceGrid/NullSSLPermissionsVerifier
IceGrid.Registry.AdminSSLPermissionsVerifier=DemoIceGrid/NullSSLPermissionsVerifier

# Dummy username and password for icegridadmin.
IceGridAdmin.Username=test
IceGridAdmin.Password=test

4.node(可以多个)


# The IceGrid locator proxy.
Ice.Default.Locator=DemoIceGrid/Locator:tcp -h localhost -p 4061
#节点名
IceGrid.Node.Name=node1
#指定节点1用于坚挺客户端连接的端口号
IceGrid.Node.Endpoints=tcp -p 5062
#节点1相关数据的存储目录
IceGrid.Node.Data=D:\ice\icegrid_demo\node1

#IceGrid.Node.CollocateRegistry=1
#IceGrid.Node.Output=db
#IceGrid.Node.RedirectErrToOut=1

#指定错误日志文件,若为指定,则直接在node1目录下生成
#Ice.StdErr=D:\ice\icegrid_demo\node1\stdErr.log
#Ice.StdOut=D:\ice\icegrid_demo\node1\stdOut.log


5.application.xml配置(配置iceBox)


<pre name="code" class="html"><icegrid>
  <application name="MyPowerIce2">
	<properties id="MultiThreaded">
		<property name = "Ice.PrintStackTraces" value="1"/>
		<property name = "Ice.Trace.Retry" value="2"/>
		<property name = "Ice.Trace.Network" value="2"/>
		<property name = "Ice.Trace.ThreadPool" value="2"/>
		<property name = "Ice.Trace.Locator" value="2"/>
	</properties>
    <server-template id="HelloServerTemp">
		<parameter name="id"/>
		<icebox id = "HellowServer${id}" exe="java" activation="on-demand">
			<properties>
				<properties refid="MultiThreaded"/>
			</properties>
			
			<!-- 不可缺少 -->
			<option>IceBox.Server</option>
			
			<!-- class文件的地址以及lib的依赖地址 不能有换行符 -->
			<env>CLASSPATH=C:\Program Files (x86)\ZeroC\Ice-3.6.3\lib\*;D:\code\Spring\testIceBox\lib\*;D:\code\Spring\testIceBox\target\classes</env>
			
			<!-- 客户端调用时需要这个名字   entry是接口继承类的全文件名(可以配置多个service)-->
			<service name="OnlineBook" entry="com.OnlineBookImpl">
				<adapter name="OnlineBook" id="OnlineBook${id}" endpoints="tcp" replica-group="OnlineBookRep"/>
			</service>
			
		</icebox>
	</server-template>
	
	<replica-group id="OnlineBookRep">
		<load-balancing type="adaptive" n-replicas="0"/>
		<!-- 需要在ice生成的接口的抽象类中找到id,对应下面的type-->
		<object identity="OnlineBook" type="::book::OnlineBook"/>
	</replica-group>
	
    <span style="white-space:pre">	</span><node name="node1">
      <span style="white-space:pre">		</span><server-instance template="HelloServerTemp" id="1"/>
   <span style="white-space:pre">	</span> </node>

  </application>

</icegrid>
 
 

6.客户端程序

package com;

import com.hp.tel.ice.book.Message;
import com.hp.tel.ice.book.OnlineBookPrx;
import com.hp.tel.ice.book.OnlineBookPrxHelper;

public class Client {
	public  static void main(String [] args){
		System.out.println("【客户端开始测试】"+args[0].toString());
		int status = 0;
		Ice.Communicator ic = null;
		try {
			//node1.cfg中的链接地址
			ic = Ice.Util.initialize(new String[] {"--Ice.Default.Locator=DemoIceGrid/Locator:tcp -h 127.0.0.1 -p 4061"});
			//app.xml文件中的server名称
			Ice.ObjectPrx base = ic.stringToProxy("OnlineBook");
			//在generated中找到接口对应的Helper
			OnlineBookPrx onlinBook = OnlineBookPrxHelper.checkedCast(base);
			if(onlinBook == null){
				throw new Error("Invalid proxy");
			}
			//调用服务方法
			Message msg = new Message();
			msg.name = "djl";
			msg.type = 3;
			msg.price = 99.99;
			msg.valid = true;
			msg.content = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
			System.out.println(onlinBook.bookTick(msg).content);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			status = 1;
			e.printStackTrace();
		}finally {
			if(ic!=null){
				ic.destroy();
			}
		}
		System.exit(status);
	}
}

7.启动IceGrid


1.注册register  (注册服务,然后会在D:\ice\icegrid_demo\registry生成二进制文件,用来保存服务的注册信息)
	icegridregistry --Ice.Config=registry.cfg
2.注册node
	icegridnode --Ice.Config=node1.cfg
3.启动icegridadmin工具
	icegridadmin -u test -p test --Ice.Default.Locator="DemoIceGrid/Locator:tcp -h localhost -p 4061"
	注意用户名、密码(register中配置)、以及双引号中的配置(node1中的连接地址)
	部署:
		application add app.xml 添加iceBox配置文件
			    remove  删除
			    list  查看
	启动:
		server list 查看
		server	start 名字(查看出来的名字)
			remove 删除
启动成功后,node的命令行界面显示如下:

8.利用客户端测试


客户端显示:

服务器在node上打印:



在日志文件中打印:




9.项目结构、及icegrid部署目录







10.pom.xml文件


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>testIceGrid</groupId>
	<artifactId>testIceGrid</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<properties>
		<log4j.version>1.2.17</log4j.version>
		<slf4j.version>1.7.2</slf4j.version>
	</properties>
	
	<dependencies>
		<!-- https://mvnrepository.com/artifact/com.zeroc/ice -->
		<dependency>
			<groupId>com.zeroc</groupId>
			<artifactId>ice</artifactId>
			<version>3.6.3</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.zeroc/icebox -->
		<dependency>
			<groupId>com.zeroc</groupId>
			<artifactId>icebox</artifactId>
			<version>3.6.3</version>
		</dependency>
	
		
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
		</dependency>
	
	</dependencies>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

11.log4j.properties文件


# Settings
dir=.
file=ice.log
target=${dir}/${file}

# Set root logger level to DEBUG and add appenders
log4j.rootLogger=DEBUG, A1, A2

# A1 ConsoleAppender
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c  - %m  %n

# A2 FileAppender
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=${target}
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %t %c - %m%n

# A3 RollingFileAppender
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.File=logs/extProfile.log
log4j.appender.A3.MaxFileSize=20480KB
log4j.appender.A3.MaxBackupIndex=10
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %t %c - %m%n

# set threshold
#log4j.appender.A1.Threshold=INFO
#log4j.appender.A2.Threshold=INFO


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值