Spring Boot整合hessian入门

前言

看了其他的文章发现,大多数都是只写了关键的部分,对于一个初学者来说只能明白用了什么东西,但实际动手发现,项目还存在一些问题,通过本篇文章,可以避免一些问题,节省一些时间成本。

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…

    原文作者:BAKERSTREETw
    原文地址: https://segmentfault.com/a/1190000017454805
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞