SpringBoot+Hessian實例

最近公司有個項目使用了Hessian,特做個Demo備份。

Hessian以高性能,使用簡單聞名,使用起來確實非常簡單,結合強大的SpringBoot,整個範例實現了config的CRUD,代碼不到50行,非常有實戰意義。

==============創建工程==============

使用 start.spring.io/ 創建工程。創建一個hessianserver工程,依賴中增加web和lombok。再創建一個hessianclient工程,依賴中增加web和lombok,cache。

再單獨在STS中新建一個maven工程hessiancommon,用於存放bean定義和介面定義。

==============hessiancommon工程==============

這裡還是以config的crud為例,比較有代表意義。直接用STS新建一個MAVEN項目即可。單獨一個工程的目的是為了獨立出來讓Server和client端都可以引用。相當於api文檔。

新建Config,ResultBean,和IConfigService介面定義。Bean需要實現Serializable介面。

Config:

@Datan@Buildernpublic class Config implements Serializable {nntprivate static final long serialVersionUID = 1L;nntprivate long id;nntprivate String name, value;n}n

ResultBean:

@Datanpublic class ResultBean<T> implements Serializable {nntprivate static final long serialVersionUID = 1L;nntprivate int code;nntprivate String msg = "success";nntprivate T data;nntpublic ResultBean() {nttsuper();nt}nntpublic ResultBean(T data) {nttsuper();nnttthis.data = data;nt}n}n

IConfigService:

/**n * 定義config的操作介面n * n * @author 曉風輕 https://github.com/xwjie/HessianDemon *n */npublic interface IConfigService {nntResultBean<Long> addConfig(Config config);nntResultBean<Collection<Config>> getAll();nntResultBean<Boolean> delete(long id);n}n

==============hessianserver工程==============

1 引入hessiancommon

2. 加入Hessian依賴

<dependency>n <groupId>com.caucho</groupId>n <artifactId>hessian</artifactId>n <version>4.0.38</version>n</dependency>n

3. 實現IConfigService介面

使用map簡單實現

/**n * 實現最簡單的的config操作dn * n * @author 曉風輕 https://github.com/xwjie/HessianDemon *n */n@Servicenpublic class ConfigService implements IConfigService {nntprivate final ConcurrentSkipListMap<Long, Config> configs = new ConcurrentSkipListMap<Long, Config>();nntprivate static final AtomicLong idSequence = new AtomicLong(1000L);nnt@Overridentpublic ResultBean<Long> addConfig(Config config) {nttSystem.out.println("addConfig:" + config);nttnttlong id = idSequence.incrementAndGet();nnttconfig.setId(id);nttconfigs.put(id, config);nnttreturn new ResultBean<>(id);nt}nnt@Overridentpublic ResultBean<Collection<Config>> getAll() {nttSystem.out.println("GetAll:=======列印一個日誌,後面會用到========");nttreturn new ResultBean<>(configs.values());nt}nnt@Overridentpublic ResultBean<Boolean> delete(long id) {nttSystem.out.println("Delete:" + id);nttreturn new ResultBean<>(configs.remove(id) != null);nt}nn}n

4. 發布hessian服務

以下代碼使用HessianServiceExporter發布了一個ConfigService的服務。

/**n * 發布Config的Hessian服務n * n * @author 曉風輕 https://github.com/xwjie/HessianDemon *n */n@Configurationnpublic class HessianConfig {nt@Autowiredntprivate IConfigService configService;nnt@Bean(name = "/ConfigService")ntpublic HessianServiceExporter hessianServiceExporter() {nttHessianServiceExporter exporter = new HessianServiceExporter();nnttexporter.setService(configService);nttexporter.setServiceInterface(IConfigService.class);nnttreturn exporter;nt}n}n

==============hessianclient工程==============

1 引入hessiancommon(同上)

2. 加入Hessian依賴(同上)

3. 配置hessian服務

使用HessianProxyFactoryBean 引入服務。

@Configurationnpublic class HessianConfig {nnt@Beanntpublic HessianProxyFactoryBean helloClient() {nttHessianProxyFactoryBean factory = new HessianProxyFactoryBean();nnttfactory.setServiceUrl("http://localhost:8080/ConfigService");nttfactory.setServiceInterface(IConfigService.class);nnttreturn factory;nt}n}n

==============測試==============

1 先啟動hessianserver

2 修改hessianclient埠

8080埠已經被hessianServer佔用,需要修改。把application.properties修改為application.yml(因為yml格式有提示),指定埠為8081

server:n port: 8081n

3 編寫junit測試類,直接注入IConfigService介面並調用

@RunWith(SpringRunner.class)n@SpringBootTestnpublic class HessianclientApplicationTests {nnt@AutowiredntIConfigService configService;nnt@Testntpublic void configTest() {nttResultBean<Long> addResult = configServicentttt.addConfig(Config.builder().name("配置項名稱").value("配置項值").build());nttSystem.out.println(addResult);nnttResultBean<Collection<Config>> all = configService.getAll();nttSystem.out.println(all);nntt// 把剛剛新建的刪除掉nttResultBean<Boolean> deleteResult = configService.delete(addResult.getData());nttSystem.out.println(deleteResult);nt}nn}n

4 啟動junit測試

5 測試成功

==============GITHUB地址==============

xwjie/HessianDemo ,請直接下載運行即可。


推薦閱讀:

Spring boot與Spring cloud 是什麼關係?
springboot怎麼學?
關於Spring MVC的教程和例子?
spring-jdbc 目前還是一個主流的廣泛使用的持久化框架嗎?

TAG:SpringBoot | RPC框架 |