Springboot + hessian 實現遠程調用

1.創建兩個maven工程,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>
  <version>0.0.1-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
		<dependency>    
		      <groupId>com.caucho</groupId>    
		       <artifactId>hessian</artifactId>    
		        <version>4.0.38</version>
		</dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2.服務端代碼實現

   (1)創建實體類:

ublic class UserInfo implements Serializable{
	private static final long serialVersionUID = 1L;
	private String userName;
	private String pwd;
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public UserInfo(String userName, String pwd) {
		this.userName = userName;
		this.pwd = pwd;
	}
}

(2)創建服務端服務接口:

public interface HessianService {    
    List<UserInfo> getUsers();
}

(3)創建服務接口實現類:

@Service("hessianService")
public class HessianServiceImpl implements HessianService {
	@Override
	public List<UserInfo> getUsers() {
		UserInfo userInfo = new UserInfo("客戶1","111");
		UserInfo userInfo2 = new UserInfo("客戶2","222");
		UserInfo userInfo3 = new UserInfo("客戶3","333");
		List<UserInfo> users = new ArrayList<UserInfo>();
		users.add(userInfo);
		users.add(userInfo3);
		users.add(userInfo2);
		return users;
	}
}

(4)創建啓動類並使用hessian向外暴露服務:

@SpringBootApplication
public class HessianServerApplication {
	@Autowired
	private HessianService hessianService;
	@Bean(name = "/hessian")
	public HessianServiceExporter accountService() {   
	    HessianServiceExporter exporter = new HessianServiceExporter();      
	    exporter.setService(hessianService);   
	    exporter.setServiceInterface(HessianService.class);   
	    return exporter;
	}
	public static void main(String[] args) {
		SpringApplication.run(HessianServerApplication.class, args);
	}
}

(5)服務端端口配置:

server.port=9999

(6)服務端目錄如下:

3.客戶端代碼實現如下:

(1)實體類和服務接口與服務端一致,可以查考服務端代碼:

(2)創建客戶端接口:

@RestController
public class HessianController {
	@Autowired
	HessianService hessianService;
	@RequestMapping("/getUsers")
	public List<UserInfo> test(){
	    return hessianService.getUsers();
	}
}

(3)創建啓動類,並關聯服務:

@SpringBootApplication
public class HessianClientApplication {
	@Bean
	public HessianProxyFactoryBean helloClient() {              
	      HessianProxyFactoryBean factory = new HessianProxyFactoryBean();   
	      factory.setServiceUrl("http://localhost:9999/hessian");   
	      factory.setServiceInterface(HessianService.class);   
	      return factory;
	}
	public static void main(String[] args) {
		SpringApplication.run(HessianClientApplication.class, args);
	}
}

(4)客戶端端口配置:

server.port=9998

(5)客戶端目錄結構如下:

4.測試

依次啓動服務端和客戶端

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章