bboss aop 远程服务介绍-远程服务调用实例

简介: 环境准备 准备三台服务器 n         服务器A Ip 172.16.17.56 端口 1185   n         服务器B Ip 172.16.17.51 端口 1185 n         服务器C Ip 172.16.17.52 端口 1185 服务部署 假设我们已经定义了业务组件test.A和test.B,分别实现接口test.ServiceInf。

环境准备

准备三台服务器

n         服务器A

Ip 172.16.17.56

端口 1185

 

n         服务器B

Ip 172.16.17.51

端口 1185

n         服务器C

Ip 172.16.17.52

端口 1185

服务部署

假设我们已经定义了业务组件test.Atest.B,分别实现接口test.ServiceInf。服务中定义了方法handle(),返回值为Object,方法代码如下:

public  Object handle(){

    return new Integer(1);

}

ABC三台服务器上分别部署管理服务managerid,建立配置文件service-assemble.xml内容如下:

<manager-config>

 

<manager id="managerid"  //管理服务id

singlable="true" //单列模式

 >

<provider type="provider_a"  //provider实现a

           class="test.A" />

<provider type="provider_b" //provider实现b

           class="test.B" />

<transactions>

<method name="handle" txtype="REQUIRED_TRANSACTION"/>

</transactions>

</manager>

<manager-config>

 

然后将service-assemble.xml导入到主配置文件manager-provider.xml文件:

<manager-config>

   

    <managerimport file="com/chinacreator/spi/rpc/service-assemble.xml" />

</manager-config>

 

在主配置文件manager-provider.xml中添加以下配置,作为远程管理组件启用的控制开关:

<manager-config>

    <properties>

       <property name="cluster_enable" value="true"/> //启用远程管理组件

       <property name="cluster_mbean_enable" value="true"/> //启用远程管理组件的mbean监控功能,目前未使用

       <property name="cluster_name" value="Cluster"/>  //远程管理组件名称

</properties>

    <managerimport file="com/chinacreator/spi/rpc/service-assemble.xml" />

</manager-config>

 

 

配置服务器间通讯端口和组播地址

 

在远程管理组件的配置文件etc/META-INF/replSync-service-aop.xml

中修改bind_port属性:

bind_port="1185"

修改组播地址:

mcast_addr="228.10.10.178"

 

客服端程序编写

package com.chinacreator.spi.rpc;

 

import com.chinacreator.spi.BaseSPIManager;

import com.chinacreator.spi.SPIException;

 

public class Test {

    public static void testMutirpcCall() {

        try {

            ServiceInf rpc = (test.ServiceInf)BaseSPIManager

                .getProvider("(172.16.17.51:1185; 172.16.17.56:1185)/managerid");

            // RPCTest rpc = (RPCTest)BaseSPIManager.getProvider("managerid");

            // RPCTest rpc =

            // (RPCTest)BaseSPIManager.getProvider("(_self)/managerid");

            // RPCTest rpc1 = (RPCTest)BaseSPIManager.getProvider(

            // "(172.16.17.52: 1185;172.16.17.56: 1185)/managerid ");

            // RPCTest rpc2 =

            // (RPCTest)BaseSPIManager.getProvider("(all)/managerid");

            long s = System.currentTimeMillis();

 

            Integer object = (Integer)rpc. handle();

                System.out.println(BaseSPIManager.getRPCResult("172.16.17.51", "1185", object));

                System.out.println(BaseSPIManager.getRPCResult("172.16.17.56", "1185", object));

               

           

            long e = System.currentTimeMillis();

 

            System.out.println((e - s) / 1000 + "");

           

        } catch (SPIException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

 

    public static void testsinglerpcCall() {

        try {

            ServiceInf rpc = (test.ServiceInf)BaseSPIManager.getProvider("(172.16.17.56:1185)/managerid");

         

            long s = System.currentTimeMillis();

 

           Object object = rpc. handle();

              

                System.out.println(object);

               

           

            long e = System.currentTimeMillis();

 

            System.out.println((e - s) / 1000 + "");

          

        } catch (SPIException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

   

    public static void testAllrpcCall() {

        try {

            ServiceInf rpc = (test.ServiceInf)BaseSPIManager.getProvider("(all)/managerid"); 

            long s = System.currentTimeMillis();          

                Object object = rpc .handle();

                System.out.println(BaseSPIManager.getRPCResult("172.16.17.51", "1185", object));

                System.out.println(BaseSPIManager.getRPCResult("172.16.17.52", "1185", object));

                System.out.println(BaseSPIManager.getRPCResult("172.16.17.56", "1185", object));

           

           

            long e = System.currentTimeMillis();

 

            System.out.println((e - s) / 1000 + "");

          

        } catch (SPIException e) {

         

            e.printStackTrace();

        }

    }

}

启动服务器

分别在每台服务器上运行类com.chinacreator.remote.RunAop的主方法,既可以启动服务器。

注意,客服端不要启动服务器。

运行客服端

Test.testAllrpcCall();

        Test.testMutirpcCall();

 Test.testsinglerpcCall();

更详细的信息请参考章节【BaseSPIProvider组件介绍中.实现远程服务调用 

目录
相关文章
|
8月前
|
安全 Java Spring
Spring中的Aop简单实例讲解
Spring中的Aop简单实例讲解
78 0
|
11月前
|
Java
SpringBoot 通过自定义注解实现AOP切面编程实例
SpringBoot 通过自定义注解实现AOP切面编程实例
212 0
SpringBoot 通过自定义注解实现AOP切面编程实例
|
Java Maven Spring
AOP功能代码实例---Spring源码从入门到精通(十七)
AOP功能代码实例---Spring源码从入门到精通(十七)
AOP功能代码实例---Spring源码从入门到精通(十七)
|
Java fastjson 数据安全/隐私保护
Springboot 自定义注解+AOP简单实例介绍
Springboot 自定义注解+AOP简单实例介绍
225 0
Springboot 自定义注解+AOP简单实例介绍
|
Java 关系型数据库 MySQL
【SpringBoot 基础系列】接口上注解 AOP 拦截不到场景兼容实例演示
在 Java 的开发过程中,面向接口的编程可能是大家的常态,切面也是各位大佬使用 Spring 时,或多或少会使用的一项基本技能;结果这两个碰到一起,有意思的事情就发生了,接口方法上添加注解,面向注解的切面拦截,居然不生效 这就有点奇怪了啊,最开始遇到这个问题时,表示难以相信;事务注解也挺多是写在接口上的,好像也没有遇到这个问题(难道是也不生效,只是自己没有关注到?) 接下来我们好好瞅瞅,这到底是怎么个情况
483 0
【SpringBoot 基础系列】接口上注解 AOP 拦截不到场景兼容实例演示
|
Java Spring
spring Aop 面向切面编程简单实例
spring Aop 面向切面编程简单实例
121 0
|
Java Spring
Spring之路(45)–Spring AOP常用的切入点表达式实例
本文目录 1. 背景 2. 表达式通配符 3. 根据类型匹配 4. 根据方法匹配 5. 根据注解匹配 6. 总结
205 0
|
Java Spring 容器
Spring之路(44)–Spring AOP通知类型详解与实例展示
本文目录 1. 通知是干啥的 2. 前置通知演示 3. 正常返回通知演示 4. 异常返回通知演示 5. 返回通知演示 6. 环绕通知演示 7. 总结
151 0
|
Java Spring 容器
Spring之路(43)–不使用AOP与使用AOP对比实例
本文目录 1. 背景 2. 环境 3. 不使用AOP实现 3.1 先来两种车,卡车(拉货)、轿车(拉人)。 3.2 编写配置类,定义容器及车辆bean 3.3 测试运行 4. 有什么问题 5. 使用AOP实现 5.1 车辆出门不需要自行登记了 5.2 配置类要开启AOP功能 5.3 编写切面 5.4 测试 6. 几个概念 7. 总结
141 0
|
监控 Java Spring
SpringBoot AOP 记录日志实例
SpringBoot AOP 记录日志实例 image.png image.png image.png image.png 散布于应用中多处的功能(日志、安全、事务管理等)被称为横切关注点。
1778 0