Feature pack to bring gRPC support to WildFly. gRPC services are registered against a gRPC server listening, by default, to port 9555.
Only gRPC services are supported at the moment. Support for gRPC clients is coming soon.
To build the feature pack, simply run
mvn installThis will build everything, and run the testsuite.
Once built you can provision a server with gRPC support using Galleon provisioning. An example using the
org.wildfly.plugins:wildfly-maven-plugin:
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<configuration>
<feature-packs>
<feature-pack>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-galleon-pack</artifactId>
<version>${version.wildfly}</version>
</feature-pack>
<feature-pack>
<groupId>org.wildfly.extras.grpc</groupId>
<artifactId>wildfly-grpc-feature-pack</artifactId>
<version>${version.wildfly.grpc}</version>
</feature-pack>
</feature-packs>
<layers>
<layer>core-server</layer>
<layer>web-server</layer>
<layer>grpc</layer>
</layers>
<galleon-options>
<jboss-fork-embedded>${galleon.fork.embedded}</jboss-fork-embedded>
</galleon-options>
<provisioning-dir>wildfly</provisioning-dir>
<log-provisioning-time>${galleon.log.time}</log-provisioning-time>
<offline>true</offline>
</configuration>
</plugin>You can also configure this with the Galleon CLI tool:
galleon.sh install org.wildfly:wildfly-galleon-pack:$WILDFLY_VERSION --dir=wildfly-grpc
galleon.sh install org.wildfly.extras.grpc:wildfly-grpc-feature-pack:$GRPC_VERSION --dir=wildfly-grpcEach example consists of three modules:
- Proto: Contains the proto definitions
- Service: Contains the gRPC service
- Client: Contains a client to call the deployed gRPC service
Before running the examples, please make sure that all necessary dependencies are available in your local maven repository:
mvn install -P examplesThe helloworld example is a slightly modified version of the helloworld example from gRPC Java examples.
To build the helloworld service, provision a WildFly server with the gRPC subsystem and any necessary certificate files,
and deploy the service, run:
mvn wildfly:run -P examples -pl examples/helloworld/service -Dssl=SSL
where SSL is either
- none: plaintext
- oneway: server identity is verified
- twoway: both server and client identities are verified
The helloworld client is a simple Java application. To build the client and call to the gRPC service, run:
mvn exec:java -P examples -pl examples/helloworld/client -Dexec.args="Bob SSL"
where, again, SSL is either "none", "oneway", or "twoway"
Alternatively you could also use tools like BloomRPC or gRPCurl to invoke the service:
grpcurl \ # plaintext
-proto examples/helloworld/proto/src/main/proto/helloworld.proto \
-plaintext \
-d '{"name":"Bob"}' \
localhost:9555 helloworld.Greeter/SayHelloor
grpcurl \ # oneway
-proto examples/helloworld/proto/src/main/proto/helloworld.proto \
-cacert examples/helloworld/client/src/main/resources/client.truststore.pem \
-d '{"name":"Bob"}' \
localhost:9555 helloworld.Greeter/SayHelloor
grpcurl \ # twoway
-proto examples/helloworld/proto/src/main/proto/helloworld.proto \
-cacert examples/helloworld/client/src/main/resources/client.truststore.pem \
-cert examples/helloworld/client/src/main/resources/client.keystore.pem \
-key examples/helloworld/client/src/main/resources/client.key.pem \
-d '{"name":"Bob"}' \
localhost:9555 helloworld.Greeter/SayHelloNote. To use the current versions of the certificate files with grpcurl, it is necessary to set
export GODEBUG=x509ignoreCN=0
This restriction will be removed in the future.
The chat example is taken from gRPC by example.
To build the chat service, provision a WildFly server with the gRPC subsystem and any necessary certificate files,
and deploy the service, run:
mvn wildfly:run -P examples -pl examples/chat/service -Dssl=SSL
where SSL is either
- none: plaintext
- oneway: server identity is verified
- twoway: both server and client identities are verified
The chat client is a JavaFX application. To build the client and connect to the gRPC service, run:
mvn javafx:run -P examples -pl examples/chat/client -Dexec.args="SSL"
To see the chat example in action, you should start multiple chat clients.
This project uses the following licenses: