前言
看了其他的文章發現,大多數都是隻寫了關鍵的部分,對於一個初學者來說只能明白用了什麼東西,但實際動手發現,專案還存在一些問題,通過本篇文章,可以避免一些問題,節省一些時間成本。
Hessian簡介
Hessian是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能。 相比WebService,Hessian更簡單、快捷。採用的是二進位制RPC協議,因為採用的是二進位制協議,所以它很適合於傳送二進位制資料。
但是它的引數和返回值都需要實現Serializable介面。
程式碼實現
由於Hessian是一個遠端呼叫的工具,那麼我們需要建立2個springboot專案來模擬,服務端專案:springboot-hessian-server,客戶端專案:springboot-hessian-client.
springboot-hessian-server端
application.properties
server.port=8081
server端pom.xml
<!-- hessian -->
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.38</version>
</dependency>
<!-- springboot-mvc-->
<!-- 新增的原因是 HessianServiceExporter 在這個jar包中 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- 建立Spring Boot專案時會出現這個外掛 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 修改一下 -->
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
需要注意上面那個外掛,預設的時候建立,但是沒有下面<configuration>中的內容,打包之後,反編譯會發現根路徑是BOOT-INF,這會引起客戶端找不到介面中的方法的問題。
建立service介面
public interface HelloWorldService {
String sayHello(String name);
}
建立service實現類
@Service
public class HelloWorldServiceImpl implements HelloWorldService {
@Override
public String sayHello(String name) {
return "Hello world! "+ name;
}
}
Application類
@SpringBootApplication
public class TestSpringbootHessianApplication {
public static void main(String[] args) {
SpringApplication.run(TestSpringbootHessianApplication.class, args);
}
@Autowired
private HelloWorldService helloWorldService;
@Bean(name = "/hello/world/service")
public HessianServiceExporter accountService(){
HessianServiceExporter exporter = new HessianServiceExporter();
exporter.setService(helloWorldService);
exporter.setServiceInterface(HelloWorldService.class);
return exporter;
}
client端
application.properties
server.port=8082
pom.xml
<!-- hessian -->
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.38</version>
</dependency>
<!-- HessianProxyFactoryBean在這個包下 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 服務端jar包 -->
<dependency>
<groupId>com.test.springboot.hessian</groupId>
<artifactId>test-hessian</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
Application類
@SpringBootApplication
public class TestSpringbootHessianClientApplication {
public static void main(String[] args) {
SpringApplication.run(TestSpringbootHessianClientApplication.class, args);
}
@Bean
public HessianProxyFactoryBean helloClient(){
HessianProxyFactoryBean factoryBean = new HessianProxyFactoryBean();
factoryBean.setServiceUrl("http://localhost:8081/hello/world/service");
factoryBean.setServiceInterface(HelloWorldService.class);
return factoryBean;
}
}
controller
@RestController
public class HelloWorldController {
@Autowired
HelloWorldService helloWorldService;
@RequestMapping("/test")
public String test(){
return helloWorldService.sayHello("zzz");
}
}
將服務端的程式碼打包安裝到本地倉庫,開啟瀏覽器輸入 http://localhost:8082/test 即可。
附上本人的git地址:
server端
https://gitee.com/BAKERSTREET…
client端
https://gitee.com/BAKERSTREET…