Photon is an asynchronous message exchange framework based on Netty.
Efficient custom protocol (Photon message exchange protocol)
- Request-Response Pattern
- One-way / Notify Pattern
High-performance NIO socket framework support - Netty4
<dependency>
<groupId>com.dinstone.photon</groupId>
<artifactId>photon</artifactId>
<version>1.2.4</version>
</dependency>publicstaticvoidmain(String[] args) throwsException {
AcceptOptionsacceptOptions = newAcceptOptions();
acceptOptions.setEnableSsl(true);
acceptOptions.setIdleTimeout(60000);
SelfSignedCertificatecert = newSelfSignedCertificate();
acceptOptions.setPrivateKey(cert.key());
acceptOptions.setCertChain(newX509Certificate[] { cert.cert() });
Acceptoracceptor = newAcceptor(acceptOptions);
acceptor.setProcessor(newMessageProcessor() {
@Overridepublicvoidprocess(Connectionconnection, Requestreq) {
LOG.info("Request is {}", req.getSequence());
Noticenotice = newNotice();
notice.setAddress("order.created");
notice.setContent(req.getContent());
CompletableFuture<Void> f = connection.sendMessage(notice);
f.thenAccept((v) -> {
Responseresponse = newResponse();
response.setSequence(req.getSequence());
response.setStatus(Status.SUCCESS);
response.setContent(req.getContent());
connection.sendMessage(response);
});
}
});
acceptor.bind(newInetSocketAddress("127.0.0.1", 4444));
System.in.read();
acceptor.destroy().awaitUninterruptibly();
}publicstaticvoidmain(String[] args) throwsThrowable {
ConnectOptionsconnectOptions = newConnectOptions();
connectOptions.setEnableSsl(true);
Connectorconnector = newConnector(connectOptions);
Connectionconnection = connector.connect(newInetSocketAddress("127.0.0.1", 4444));
LOG.info("channel active is {}", connection.isActive());
Requestrequest = newRequest();
request.setSequence(1);
request.setTimeout(10000);
request.setContent("Hello World".getBytes());
LOG.info("async request is {}", request);
connection.sendRequest(request).thenAccept(response -> {
LOG.info("async response is {}", response);
});
request = newRequest();
request.setSequence(2);
request.setTimeout(3000);
LOG.info("sync request is {}", request);
Responseresponse = connection.sendRequest(request).get();
LOG.info("sync response is {}", response);
System.in.read();
connector.destroy().awaitUninterruptibly();
}