rmi简单用例,简单有效

Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。使用spring对RMI的支持,可以非常容易地构建分布式应用。这种C/S模型的访问方式,可以屏蔽掉RMI本身的复杂性,如服务端Skeleton和客户端Stub等的处理细节,这些对于服务开发和服务使用的人员来说,都是透明的,无需过度关注,而集中精力开发你的商业逻辑。主要操作是两个方面:

在服务端:可以通过org.springframework.remoting.rmi.RmiServiceExporter可以暴露你的服务;

在客户端:可以通过org.springframework.remoting.rmi.RmiProxyFactoryBean可以使用服务端暴露的服务,非常方便。

服务端端发布服务:

1 spring配置文件spring-mvc.xml如下:指定了暴露的服务的名称,通过serviceName属性注入到RmiServiceExporter中,服务名称为RmiService,客户端通过该服务名称就能够进行调用

    <!--Spring RMI 服务端配置  panqq 2017-05-17 23:13:01 -->
    <bean id="baseRmiService" class="com.rmi.RmiServiceImpl" /> 
    <bean id="baseServiceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">  
        <!-- 调用Service -->  
        <property name="service" ref="baseRmiService" />
        <!-- value值是提供给客户端调用 -->  
        <property name="serviceName" value="rmiService" />
        <!-- service接口 -->  
        <property name="serviceInterface" value="com.rmi.RmiService" />
        <!-- 注册端口 -->  
        <property name="registryPort" value="8088" />
    </bean>

2  服务定义业务逻辑的接口和实现类

//定义接口
public interface RmiService {
	public String getAccessToken();
	public String getTicket() ;
	public JSONObject sendMsg(JSONObject data,String toUserId,String toOpenId,String templateId,String url);
}

//该接口的实现类
public class RmiServiceImpl implements RmiService {
    .....
}


客户端口调用服务

1 客户端client.xml配置:配置中,将一个serviceUrl和serviceInterface注入给RmiProxyFactoryBean,即可进行远程方法调用。调用示例如下所示:

<!-- spring rmi 客户端配置  -->
	<bean id="rmiService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
		<!-- baseService是调用服务端serviceName的value,8088是服务端注册的端口 -->
		<property name="serviceUrl" value="rmi://localhost:8088/rmiService" />
		<!-- service接口 -->
		<property name="serviceInterface" value="com.rmi.RmiClientService" />
	</bean>

2 客户端的实现类:

public interface RmiClientService {
	public String getAccessToken();
	public String getTicket() ;
	public JSONObject sendMsg(JSONObject data,String toUserId,String toOpenId,String templateId,String url);
}

代码实现:这样就可以实现接口映射,实现远程调用服务端接口的。可用注解方式,或者直接调用client.xml方式调用

...
public RmiClientService rmiService;
@Test
public void testMsg() {
	......
*/    	rmiService.sendMsg(data, "674581a5310145c9888cae", "oGUg1wok3VAsG6qYX1Kg1", ConStant.wechatmsgmode_rztg, "");// 发送微信消息
}
public static void main(String[] args) {  
        ApplicationContext ctx = new ClassPathXmlApplicationContext(  
                "org/xxx/xxx/xx/client.xml");  
        RmiClientService service = (AccountService) ctx  
                .getBean("rmiService");  
        String result = service.sendMsg(data, "674581a5310145c9888cae", "oGUg1wok3VAsG6qYX1Kg1", ConStant.wechatmsgmode_rztg, "");// 发送微信消息 
    }
时间: 2024-10-15 10:36:02

rmi简单用例,简单有效的相关文章

Junit的最简单样例:Hello world!

我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3824934.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验. 不多说了,贴两段代码. HelloWorld类: public class HelloWorld { public void main() { System.out.println(helloWorld()); } public static String helloWorld() { retu

自己定义隐式转换和显式转换c#简单样例

自己定义隐式转换和显式转换c#简单样例 (出自朱朱家园http://blog.csdn.net/zhgl7688) 样例:对用户user中,usernamefirst name和last name进行转换成合成一个限定长度为10个字符新name. 自己定义隐式转换: namespace transduction { public partial class transductionForm : Form { public transductionForm() { InitializeCompon

JsPlumb简单样例

JsPlumb简单样例: <!DOCTYPE html> <html> <head>     <script src="jquery-1.9.0.js"></script>     <script src="jquery-ui-1.9.2-min.js"></script>     <script src="jquery.jsPlumb-1.4.0-all.js&qu

velocity简单样例

velocity简单样例整体实现须要三个步骤,详细例如以下: 1.创建一个Javaproject 2.导入须要的jar包 3.创建须要的文件 ============================================ 1.创建一个Javaproject 名称:JKTest,例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZV9qaw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA

dwr框架异步调用简单小例

DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架.可以轻松实现用js直接调用java方法. 通过一个小例子来演示一个dwr的基本使用: ①. 首先肯定要创建一个web project的,然后拷贝dwr.jar到WEB-INF\lib目录下 ②. 修改web.xml文件,添加dwr servlet配置 <servlet> <servlet-name>dwr-invoker</servlet-name>

php libevent扩展的简单用例

php libevent扩展具有很强大的功能.以下摘自百度百科: Libevent 是一个用C语言编写的.轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大: 源代码相当精炼.易读:跨平台,支持 Windows. Linux. *BSD 和 Mac Os:支持多种 I/O 多路复用技术, epoll. poll. dev/poll. select 和 kqueue 等:支持 I/O, 定时器和信号等事件:注

Docker Compose 创建yml 简单试例

Docker Compose 创建yml 简单试例 Docker Compose 文件使用格式版本需要与Docker版本对应可在官网内查找 查找地址:https://docs.docker.com/compose/compose-file/compose-file-v2/#compose-and-docker-compatibility-matrix 1.创建compose-test目录,进入目录再改目录下创建文件 mkdir compose-test;cd compose 2.创建构造文件 v

简单除法(简单枚举优化)

#include<iostream> #include<algorithm> using namespace std; void panduan(int s,int k) { int n,m;bool l=1; n=s;m=k; int i,sn=0,a[20],j; for(i=0;n!=0;i++) { a[i]=n%10; n=n/10; } for(;m!=0;i++) { a[i]=m%10; m=m/10; } i--; sort(a,a+i); if(i==8) {a

JSP简单练习-一个简单的计数器

在JSP中,在"<%"和"%>"之间书写的程序代码成为java程序片. 一个JSP页面中可以有多个java程序片.要注意的是,在Java程序片中声明的变量在它们所在JSP页面的所用程序片及表达式中都有效.基于此,可以把一个较大的程序片分成几个小的程序片,还可在其中插入HTML语句,以便编写的程序代码更具有可读性. 在程序片中声明的变量只在页面有效,是局部变量,它在不同的客户访问同一个页面时,此变量是不能共享的.但如果是在"<%!"

复杂的事情简单做,简单的事情重复做,重复的事情用心做!

人们常说“复杂的事情简单做,简单的事情重复做,重复的事情用心做!”,其中真正的内涵是什么呢? 所有事情想完成都是复杂的,复杂的事情简单做,只有将步骤简单化,理出脉络,才能着手去做.多数时候我们都把简单当简化来做了,而简单并非简化,简单是每一步骤都要清晰做到位,简化则是是几个步骤合并去做,省略了本该有的过程,事情往往就是毁在了简化上.重复并非复制.简单的事情重复做,就是要我们要看清楚自己在这里面能重复的是什么?在重复的过程中,进度快了是因为自己的能力提升了?还是简化了步骤?而复制是按原来的模子一模