SpringBoot+Hessian實例
最近公司有個項目使用了Hessian,特做個Demo備份。
Hessian以高性能,使用簡單聞名,使用起來確實非常簡單,結合強大的SpringBoot,整個範例實現了config的CRUD,代碼不到50行,非常有實戰意義。
==============創建工程==============
使用 https://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框架 |