1. 程式人生 > >簡單的Java實現Netty進行通訊

簡單的Java實現Netty進行通訊

# 使用Java搭建一個簡單的Netty通訊例子 > 看過dubbo原始碼的同學應該都清楚,使用dubbo協議的底層通訊是使用的netty進行互動,而最近看了dubbo的Netty部分後,自己寫了個簡單的Netty通訊例子。
> 本文源地址:[實現Netty進行通訊](https://yanzhenyidai.com/#/netty/use-java-create-netty-communication) --- ## 準備 > 工程截圖 ![netty-example-1.png](https://i.loli.net/2020/05/16/U1Mk92SRWDFbCXi.png) > 模組詳解 - rpc-common rpc-common作為各個模組都需使用的模組,工程中出現的是一些通訊時請求的引數以及返回的引數,還有一些序列化的工具。 - rpc-client rpc-client中目前只是單單的一個NettyClient啟動類。 - rpc-server rpc-client中目前也只是單單的一個NettyServer服務啟動類。 > 需要的依賴 目前所有的依賴項都出現在 rpc-common 下的 pom.xml中。 ```xml ``` --- ## 實現 > 首先我們在common中先定義本次的Request和Response的基類物件。 ```java public class Request { private String requestId; private Object parameter; public String getRequestId() { return requestId; } public void setRequestId(String requestId) { this.requestId = requestId; } public Object getParameter() { return parameter; } public void setParameter(Object parameter) { this.parameter = parameter; } } public class Response { private String requestId; private Object result; public String getRequestId() { return requestId; } public void setRequestId(String requestId) { this.requestId = requestId; } public Object getResult() { return result; } public void setResult(Object result) { this.result = result; } } ``` > 使用fastJson進行本次序列化 Netty物件的序列化轉換很好懂, `ByteToMessageDecoder` 和 `MessageToByteEncoder` 分別只要繼承它們,重寫方法後,獲取到Object和Byte,各自轉換就OK。 不過如果是有要用到生產上的同學,建議不要使用 `fastJson`,因為它的漏洞補丁真的是太多了,可以使用google的 `protostuff`。 ```java public class RpcDecoder extends ByteToMessageDecoder { // 目標物件型別進行解碼 private Class target; public RpcDecoder(Class target) { this.target = target; } @Override protected void decode(ChannelHandlerContext ctx, ByteBuf