Spring Boot整合hessian入門

BAKERSTREETw發表於2019-01-19

前言

看了其他的文章發現,大多數都是隻寫了關鍵的部分,對於一個初學者來說只能明白用了什麼東西,但實際動手發現,專案還存在一些問題,通過本篇文章,可以避免一些問題,節省一些時間成本。

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…

相關文章