Spring boot rmi 远程方法调用

 RMI 远程方法调用(Remote Method Invoke)

  

远程和本地都有的接口类:

package com.rmi.service;

public interface HelloService {
	public String say(String name) ; 
}

远程接口实现类:

package com.rmi.service.impl;

import org.springframework.stereotype.Service;

import com.rmi.service.HelloService;

@Service()  
public class HelloServiceImpl implements HelloService {

	@Override
	public String say(String name) {
		return name + "-- hpgary " ;
	}

}

 远程服务启动类:

package com.rmi.server;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.remoting.rmi.RmiServiceExporter;

import com.rmi.service.HelloService;

@SpringBootApplication(scanBasePackages = "com.rmi")
public class App extends SpringBootServletInitializer {
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(App.class);
	}

	public static void main(String[] args) {
		SpringApplication.run(App.class, args);
	}
	/* rmi 服务器暴漏 服务*/
	@Bean
	public RmiServiceExporter rmiServiceExporter(HelloService helloService){
		RmiServiceExporter rmiServiceExporter = new RmiServiceExporter();
                // 客户端通过rmi调用的端口
		rmiServiceExporter.setRegistryPort(1111);
                // 客户端调用注册调用的服务名
		rmiServiceExporter.setServiceName("hello");
                // 注册的service
		rmiServiceExporter.setService(helloService); 
                //注册的接口
		rmiServiceExporter.setServiceInterface(HelloService.class) ;
		return rmiServiceExporter ;
	}
}

   本地使用

package com.rmi.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.remoting.rmi.RmiProxyFactoryBean;

import com.rmi.service.HelloService;

@SpringBootApplication(scanBasePackages = "com.rmi")
public class App extends SpringBootServletInitializer {
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(App.class);
	}

	public static void main(String[] args) {
		ConfigurableApplicationContext run = SpringApplication.run(App.class, args); 
		//获取方法
		HelloService bean = run.getBean(HelloService.class);
		//调用接口方法,实际上是远程方法
		System.out.println(bean.say("hf"));
	}
	/*本地注册远程服务,通过tcp 调用远程方法*/
	@Bean
	public RmiProxyFactoryBean rmiProxyFactoryBean() {
		RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean();
		rmiProxyFactoryBean.setServiceUrl("rmi://127.0.0.1:1111/hello"); 
		rmiProxyFactoryBean.setServiceInterface(HelloService.class); 
		return rmiProxyFactoryBean;
	}
}

猜你喜欢

转载自hpgary.iteye.com/blog/2373459
今日推荐