Skip to content

Latest commit

History

103 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Photon

LicenseMaven Central

Overview

Photon is an asynchronous message exchange framework based on Netty.

Features

  • Efficient custom protocol (Photon message exchange protocol)

    • Request-Response Pattern
    • One-way / Notify Pattern
  • High-performance NIO socket framework support - Netty4

Quick Start

add dependency:

<dependency>
<groupId>com.dinstone.photon</groupId>
<artifactId>photon</artifactId>
<version>1.2.4</version>
</dependency>

message provider:

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();
}

message consumer:

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();
}

About

photon is a message exchange framework

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages