bbossgroups2.0-RC版本中如何通過JGroups來實現叢集節點間遠端服務呼叫,或者多伺服器之間遠端服務呼叫

bboss發表於2010-07-17

bbossgroups 2.0-RC中對jgroups已經升級到Jgroups 2.10.0版本,因此對aop中基於JGroups的rpc也做了相應的調整,本文詳細講解新的使用方法:

1.配置檔案目錄調整:

jgroups本身協議配置檔案和存放目錄(tcp,udp)

/bbossaop/resources/org/frameworkset/spi/jgroups/jgroups-tcp.xml

/bbossaop/resources/org/frameworkset/spi/jgroups/jgroups-udp.xml

manager-rpc-service.xml中針對JGroups的相應配置為:

<!–

        jgroups叢集協議配置

         –>

        <property name=”cluster_name” value=”Cluster”/>

        <property name=”cluster_protocol” value=”udp”/>

        <property name=”cluster_protocol.tcp.configfile” value=”org/frameworkset/spi/jgroups/jgroups-tcp.xml”/>

        <property name=”cluster_protocol.udp.configfile” value=”org/frameworkset/spi/jgroups/jgroups-udp.xml”/>

2.JGroups協議單獨啟動方法沒有改變,還是以下的方法:

RPCHelper.getRPCHelper().startJGroupServer();

基於bboss開發的平臺中啟動jgroups的方法,manager-rpc-service.xml中的相關項做如下設定即可:

<property name=”rpc.default.protocol”

      value=”jgroup”/>

<property name=”rpc.startup.protocols”

      value=”jgroup”/>

<property name=”rpc.security” >

<map>

<property name=”rpc.login.module” enable=”false” class=”org.frameworkset.spi.security.SimpleLoginModule”/>

<property name=”rpc.authority.module” enable=”false” class=”org.frameworkset.spi.security.SimpleAuthorityModule”/>

<property name=”data.encrypt.module” enable=”false” class=”org.frameworkset.spi.security.SimpleEncryptModule”/>

</map>

</property>

每個節點應用的udp協議檔案jgroups-udp.xml中的組播地址設定成一樣的即可:

mcast_addr=”232.10.10.10″

地址值可以根據需要進行修改。

3.客服端相關介面及使用方法

獲取叢集節點地址集合方法:

Vector<Address> addresses = JGroupHelper.getJGroupHelper().getAppservers();

獲取遠端服務元件方法:

    * 單播

Address address_ = addresses.get(0);

RPCTestInf testInf = (RPCTestInf)ApplicationContext.getApplicationContext().getBeanObject(“(jgroup::” + address_ + “)/rpc.test”);

呼叫遠端方法:

Object value = testInf.getCount();

    * 多播

Address address_0 = addresses.get(0);

Address address_1 = addresses.get(1);

RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject(“(jgroup::”+address_0+”;”+address_0+”)/rpc.test”);

呼叫遠端方法:

Object value = testInf.getCount();

獲取address_0的結果:

Object ret_0 = BaseSPIManager.getRPCResult(address_0.toString(), value ,Target.BROADCAST_TYPE_JRGOUP);

獲取address_1的結果:

Object ret_1 = BaseSPIManager.getRPCResult(“address_1.toString(), ret,Target.BROADCAST_TYPE_JRGOUP);

    * 組播

RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject(“(jgroup::all)/rpc.test”);

呼叫遠端方法:

Object value = testInf.getCount();

遍歷所有結果:

       int size = BaseSPIManager.getRPCResultSize(ret);

        for(int j = 0; j < size; j ++)

        {

            Object ret = BaseSPIManager.getRPCResult(j, ret);

            System.out.println(“ret:” + j + ” = “+ret_1186);

        }


相關文章