Skip to content

Commit b95ec86

Browse files
authored
Merge branch 'master' into upgrade-dependencies
2 parents 332b51a + d3452ad commit b95ec86

File tree

18 files changed

+402
-89
lines changed

18 files changed

+402
-89
lines changed

.travis.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,7 @@ cache:
3434
env:
3535
global:
3636
- secure: "ErthuwJHqk8MPlGQcwaSV1mk6DI1z6YHg+XnNUE9yx/EXUqVMyazu5u9VqlZhMMQQm6II8Y8oBF1uK4JdNVKa44xCt8OM3d/HbG5WhYyigNuKaOgK19FGfA7hciY4gzcMsix/lOryqu8JlYqABAIJFwZIJFtnEdylxUO46/PLP01TOHVOrnaUXpTNm6esaXfmgv1ToQCtwALSgo/xy2KYFA6vpzcTYnMii9eMaOZdy3162t8M6equ2WHhqiKvxCX1+M8D76/WoRF1v45dekAV3UKSBf5b3UcK1W1V/NxtwMufD7tXLGxDsBo2JWQOLjx+AyiKGwhVkZBbvfECDKKjq3x5NMjvjqleprYNEKQYibCNvhXVpZPZgKt899RHOXMjt+fr+iq1aHpHU98iFWXyp+MgYbe9Fez/xcWDH9rri+LKsCgZd1PtpDjTjUsZWesAsXYQatTGOZ0w0cOkURbVhUKltnf/AzuhOlj3XqJmO30vKiBhtwzyfvrURc+0GqWlRoU0C1qskmtmI10PJRR1Qv3eMKvvi6XIQfit9J01V/0sJ+WoG6980hJy0N421qr1+LNg3WmDGtMp6UyoAvjUbDFaW3xzGdbsNmLzWqfaFY1kM7ry6WaVVbGEYz0uHKEvMnqLrM3t18qO4wQsaskGCYEaYSmFp4oMT4pDRgCzvU="
37-
- secure: "G+FkJfEGeUdBFtMtZSZJxyTvdlD8IJnAuznEXuxsApL2khEsOtojTDEHJuE0nyVLFrxe5eFfbF/X2AHIQ7bgH0CPQKoT9GtVZJQDrLbDONzGQNbIUtmo+xIfpPmfmGxWiRTaovyU3K3KWJdU5s6sokMpCqNeTNgugzDstC2QFawmSL4BtVqMP5t9LrTbRw+FR7NkSZ2HCuad80RrYAOir1jqi7852AKzUACvvOwgZRbaaWGSTxdow3V3pJGGw2k8fx7C1vYaucKGhgkV9dT1GgHAV4TyXzEWfBhIofG3aqAT4d/sVLFKcsh6ixBLDe29mCchWyhB24eaLlArjerDVFy+bCMWHsLYXHtqSpZAyyi8DEHMpFalfpCif9OhNcCTlBrUkr58i1P6Ru6lVmzsW9FhijtNmX4Hdz+BRCQJB7G1zYwULOYG+mQTDmHBGP8lUswaCwD4kxMjfZBna23gsD4z8r3WWMbaG0zRuUuX7gnApI/LYaSbm9eM+ef5IEYOwvA5uf/ZRsSyoetcmI+hGHiFPZUUgCg2SI/RWyB2XAuHBsD//cHWF9JiFv0av0/19HkryRSjGo029qa456BDI4yTTRfT0L6oUjCtjXGOVmWkkd1TB/G8oidPjB3HCGMttKrSpdB0Y6RrVzjZJueqqaCOZ2X4+ksqc4PB3vZR8vo="
37+
- secure: "sQYup+Bn5NeIKRa1EWMcgWyfP4kHmD5WZ0slTIjZjGRBqqAR7SdRv1XklkEoUE2BXKxEmhKn5bPA3itmn0ix3N4y9km0q9DRQ0RJF+MFJcSg0CYpSlfjGUEUGoIdYQjreZ+AETAyniLGDVE28tWBQ+GliwfKViiE0LESDihfcqUe/7lcDuc/UMP9h7ecazLjwCmmVNYM94ZfTVoPrbC3Jdtb1sPd65/yZPj7pgBzk/vh82E5tmo0JYr81Rq8CKiYoQ2W7qiTmKL/X33mVxvC9lRRNoqgfAyofgnv5zMbvj1krCcKrkuOJ+A/wTOnkZ1MEL/YK0ilNw0g9oxY0MRXEq9jvms4M2bvGyj0jdKB+ctsXMf9l7ZvWdj1kTEHguQxpjg6hhxrwjRwKk5y0LPJFi3Nqxet00+aB2Wqg1AJ5KwBZ9s2e6nhfAOMnWFVct8mxnFfb/8cu1XfyET5ABBK7PozpcY8VQUVqpoSheKuGdFYRXXgA4o42t+Uxt8G/XX5TRJpaD2FtPa9YwtsrCx6HtCEVetSFZ6X0JeHPdzLBn3XTqyPBoc4bD28VFnEs1NKj+Sbj09sDKH93HQ+PafcJnFiPC7Pdk7NedHCqmEXtppvA+L4pL0V9zDNn93pKLgXsCovcrX7nCnfWk2IjGnDMgZaxWPnW0r0AWsl0BwbqjM="
38+
- secure: "eV4F5Jp3n8Qi79ATwAUvQdhhZzg/jxKVpTe1ovF0paSWtETe5Whuqb+52nLF4um8NrXDLuTM2Ms12o2rUThaqnEgKWR9HSgwXaBNyYs1zWL3J5+nhrX4/jMKtZ+VY3pH+Sk5KiDgf/jModLrXk6k7uN330PKA3hVLlzA0qc+4QXtnwZNZOQ9sjQsScVxAJ6hBJ8TpUZy4ragg07LTa87p679YFXmsClIQcLdY2eTAIXgNuv0HAe1Eyog3Q5m/ObOdQD0fO3M9Qj9QHWWeh6Rc7dcDA8Nvd6peN+dLaG7DK7Gj+lLyx3K6iXrnHzBHHg1sKKcMeejxxD/0d/auzaqP2ORudSYrblo26AU9fHEUKkdcGS0m5NwOYF9slB1U8KXbIFPPNT+W48h8OgTKPErDvnliujirPBpF9pAC8vRhRORMMbKWQIr14HrxhJ9EBhfJ6iDVBM+xEjVzAOxjRuXia8o5Bzo3rmQwDO+Wvb1bJOZ0u7gPwNkMJF7Nj7ScEx1JLaw2RW1/xhQADxoh74NnNr3XJlicoyLZx+mDNOu0wkW0Q/F04FDlCy78VhSMgoiGPNWDtrjCWWFUhSSCbZFL5sjqFXjz24v0raqKqT12oOUwX9ueeIb0gQsMVj8zSnb7F7oZJpbKaPdofS5eEuNMSKzoJ7Imx5mkryMoL0Czic="
39+
- secure: "RU3x9rPkGiMVN1YBsNcqzpjLuR7AZMvnVrDzOKH02jDByk9H1tnVmLcodb9d/HcWjiimp+YQ6urCrUbf+kk1kphLZIC1It0vRqYgTFk8KDmP9ilZSkwzHd+uL5eDwupuv5ZkpXJUUNGHVZ0tMcQMKPc1gltuAY5wlH6v4N/irogwF0Lr0ySwzCNP/0286xGo7nAp4QU2iIOHrKDsyMpSq52YWa06/Ypo6OamNyeP+ptm+TsSWzJRmwvgh23uTNEjSVCMCTrf2w3tjSwr0vmxnMAd5vltuoQXNhTpr+P/O/uOW6YXZNzl25G3LAgwImErYrz6CN2H0tfHWbaxOPWrbTgeKUklxHrkGY42vQwNn3zIke/yNSWdUFjtKKv/8pFN+MI+Y2q7ugM4ORqyba5vZdngG0cuaHiwv0ITsvP/guCJKBOCpY0j9RbULctFfhxyVBcjneepaXb+BMPSWeMnhMvt3G3MV0LrrkjpzuBo0HgDmRo1D6dRHArQ0/V2oWV86/ZuS5cpbe0R5hZRNSXTvlJq/BIA6KVO6RFVLAKrnGjT7/cNWH1QFzAS1qTPgxefZxGb8T1vPJ12d+LDhuyqUTnd029PMSkCUzlm5EyeIvYG6auH6T2l9Q7FgIhCT6hBZNxGbavR5XyfnBg9sE+OQJmta9GjyJCdiGBJmIGKW2s="
40+

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
The standard [RSocket](http://rsocket.io) RPC Java implementation.
55

66
## Build from Source
7+
78
1. Building rsocket-rpc-java requires installation of the [Protobuf](https://github.com/google/protobuf) compiler. RSocket RPC requires Protobuf 3.6.x or higher.
89

910
For Mac users you can easily install the Protobuf compiler using Homebrew:
@@ -15,8 +16,18 @@ The standard [RSocket](http://rsocket.io) RPC Java implementation.
1516
2. Run the following Gradle command to build the project:
1617

1718
$ ./gradlew clean build
19+
20+
## What Next?
21+
22+
* [Motivation](./docs/motivation.md)
23+
* [Get Started](./docs/get-started.md)
24+
25+
## Release Notes
26+
27+
Please find release notes at [https://github.com/rsocket/rsocket-rpc-java/releases](https://github.com/rsocket/rsocket-rpc-java/releases).
1828

1929
## Bugs and Feedback
30+
2031
For bugs, questions, and discussions please use the [Github Issues](https://github.com/netifi/rsocket-rpc-java/issues).
2132

2233
## License

bintray.gradle

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
* limitations under the License.
1515
*/
1616

17-
if (project.hasProperty('bintrayUser') && project.hasProperty('bintrayKey')) {
17+
if (project.hasProperty('bintrayUser') && project.hasProperty('bintrayKey') &&
18+
project.hasProperty('sonatypeUsername') && project.hasProperty('sonatypePassword')) {
1819

1920
subprojects {
2021
plugins.withId('com.jfrog.bintray') {
@@ -46,10 +47,10 @@ if (project.hasProperty('bintrayUser') && project.hasProperty('bintrayKey')) {
4647
sign = true
4748
}
4849

49-
// mavenCentralSync {
50-
// user = project.property('sonatypeUsername')
51-
// password = project.property('sonatypePassword')
52-
// }
50+
mavenCentralSync {
51+
user = project.property('sonatypeUsername')
52+
password = project.property('sonatypePassword')
53+
}
5354
}
5455
}
5556
}

build.gradle

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,16 @@ subprojects {
3838
sourceCompatibility = 1.8
3939
targetCompatibility = 1.8
4040

41-
4241
ext['reactor-bom.version'] = 'Californium-SR2'
4342
ext['rsocket.version'] = '0.11.11'
4443

4544
ext['protobuf.version'] = '3.6.1'
4645
ext['log4j.version'] = '2.9.0'
46+
ext['slf4j.version'] = '1.8.0-beta2'
4747
ext['junit.version'] = '5.1.0'
4848
ext['mockito.version'] = '2.23.0'
4949
ext['hamcrest.version'] = '1.3'
50-
ext['jmh.version'] = '1.2.0'
50+
ext['jmh.version'] = '1.21'
5151
ext['micrometer.version'] = '1.0.6'
5252
ext['assertj.version'] = '3.11.1'
5353
ext['opentracing.version'] = '0.31.0'
@@ -76,7 +76,11 @@ subprojects {
7676

7777
dependencies {
7878

79-
dependency "com.google.protobuf:protobuf-java:${ext['protobuf.version']}"
79+
dependencySet(group: 'com.google.protobuf', version: ext['protobuf.version']) {
80+
entry 'protobuf-java'
81+
entry 'protoc'
82+
}
83+
dependency "com.google.protobuf:protoc:${ext['protobuf.version']}"
8084

8185
dependency "javax.inject:javax.inject:1"
8286
dependency "javax.annotation:javax.annotation-api:1.2"
@@ -86,6 +90,7 @@ subprojects {
8690
entry "log4j-core"
8791
entry "log4j-slf4j-impl"
8892
}
93+
dependency "org.slf4j:slf4j-simple:${ext['slf4j.version']}"
8994

9095
dependencySet(group: 'io.rsocket', version: ext['rsocket.version']) {
9196
entry 'rsocket-core'

docs/index.md renamed to docs/get-started.md

Lines changed: 51 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
RSocket RPC Java
1+
# Get Started with RSocket RPC Java
2+
3+
In this section we are going to learn the essential of RSocket-RPC and its implementation in Java
4+
25
## Introduction
36
RSocket RPC is an easy to use RPC layer that sits on top of [RSocket](http://rsocket.io). RSocket is a binary protocol for use on byte stream transports such as TCP, WebSockets, and [Aeron](https://github.com/real-logic/aeron). RSocket RPC is able to leverage RSockets unique features allowing you develop complex realtime, streaming applications without needing Kafka, Spark, etc. It is completely non-blocking and reactive making it responsive and high performance.
47

@@ -88,7 +91,7 @@ protobuf {
8891
}
8992
plugins {
9093
rsocketRpc {
91-
artifact = 'io.rsocket.rpc:rsocket-rpc-protobuf:0.2.5'
94+
artifact = 'io.rsocket.rpc:rsocket-rpc-protobuf:0.2.4'
9295
}
9396
}
9497
generateProtoTasks {
@@ -100,12 +103,19 @@ protobuf {
100103
101104
// If you use Intellij add this so it can find the generated classes
102105
idea {
103-
module {
104-
sourceDirs += file("${projectDir}/build/generated/source/proto/main/java");
105-
sourceDirs += file("${projectDir}/build/generated/source/proto/main/rsocketRpc");
106-
sourceDirs += file("${projectDir}/build/generated/source/proto/test/java");
107-
sourceDirs += file("${projectDir}/build/generated/source/proto/test/rsocketRpc");
108-
}
106+
module {
107+
sourceDirs += file("src/main/proto")
108+
sourceDirs += file("src/generated/main/java")
109+
sourceDirs += file("src/generated/main/rsocketRpc")
110+
111+
generatedSourceDirs += file('src/generated/main/java')
112+
generatedSourceDirs += file('src/generated/main/rsocketRpc')
113+
}
114+
}
115+
116+
// clean generated code
117+
clean {
118+
delete 'src/generated/main'
109119
}
110120
```
111121

@@ -168,13 +178,13 @@ Here is what the simple `SimpleService` is actually and interface, and represent
168178
```
169179
class DefaultSimpleService implements SimpleService {
170180
@Override
171-
public Mono<Void> fireAndForget(SimpleRequest message) {
172-
System.out.println("got message -> " + message.getRequestMessage());
173-
return Mono.empty();
174-
}
181+
public Mono<Empty> fireAndForget(SimpleRequest message, ByteBuf metadata) {
182+
System.out.println("got message -> " + message.getRequestMessage());
183+
return Mono.just(Empty.getDefaultInstance());
184+
}
175185
176186
@Override
177-
public Mono<SimpleResponse> requestReply(SimpleRequest message) {
187+
public Mono<SimpleResponse> requestReply(SimpleRequest message, ByteBuf metadata) {
178188
return Mono.fromCallable(
179189
() ->
180190
SimpleResponse.newBuilder()
@@ -183,7 +193,7 @@ class DefaultSimpleService implements SimpleService {
183193
}
184194
185195
@Override
186-
public Mono<SimpleResponse> streamingRequestSingleResponse(Publisher<SimpleRequest> messages) {
196+
public Mono<SimpleResponse> streamingRequestSingleResponse(Publisher<SimpleRequest> messages, ByteBuf metadata) {
187197
return Flux.from(messages)
188198
.windowTimeout(10, Duration.ofSeconds(500))
189199
.take(1)
@@ -219,7 +229,7 @@ class DefaultSimpleService implements SimpleService {
219229
}
220230
221231
@Override
222-
public Flux<SimpleResponse> requestStream(SimpleRequest message) {
232+
public Flux<SimpleResponse> requestStream(SimpleRequest message, ByteBuf metadata) {
223233
String requestMessage = message.getRequestMessage();
224234
return Flux.interval(Duration.ofMillis(200))
225235
.onBackpressureDrop()
@@ -228,51 +238,45 @@ class DefaultSimpleService implements SimpleService {
228238
}
229239
230240
@Override
231-
public Flux<SimpleResponse> streamingRequestAndResponse(Publisher<SimpleRequest> messages) {
232-
return Flux.from(messages).flatMap(this::requestReply);
241+
public Flux<SimpleResponse> streamingRequestAndResponse(Publisher<SimpleRequest> messages, ByteBuf metadata) {
242+
return Flux.from(messages).flatMap(e -> requestReply(e, metadata));
233243
}
234244
}
235245
```
236246

237247
### RSocket RPC Server Configuration
238248
Each generated service has a client and server implementation generated for you. After you have implemented the generated interface you need to hand the implementation to the server. See the below example:
239249
```
240-
SimpleServiceServer serviceServer = new SimpleServiceServer(new DefaultSimpleService());
250+
SimpleServiceServer serviceServer = new SimpleServiceServer(new DefaultSimpleService(), Optional.empty(), Optional.empty());
241251
```
242252

243-
Once you have created an instance of the the server you need to configure RSocket. The server can either be configured the RSocket that receives the connection or the RSocket that makes the connection. The following examples uses TCP, but can use other transports as well. The example also uses the optional `RequestHandlingRSocket`. The `RequestHandlingRSocket` is a special RSocket that will allow you to support more than one RSocket RPC Server implementation on the same RSocket connection. If you don't need to support more than one socket you don't need to use it. Just return the generated server directly.
253+
Once you have created an instance of the the server you need to configure RSocket. The
254+
following is a RSocket server configuration
244255

245-
#### RSocket Server Configuration
246-
This configures the receiver of a connection, typically a server, to handle requests to the `SimeplService` implementation.
247-
```
248-
SimpleServiceServer serviceServer = new SimpleServiceServer(new DefaultSimpleService());
249-
250-
RSocketFactory.receive()
251-
.acceptor(
252-
(setup, sendingSocket) ->
253-
Mono.just(new RequestHandlingRSocket(serviceServer)))
254-
.transport(TcpServerTransport.create(8801))
256+
```java
257+
CloseableChannel closeableChannel = RSocketFactory
258+
.receive()
259+
.acceptor((setup, sendingSocket) -> Mono.just(
260+
new RequestHandlingRSocket(serviceServer)
261+
))
262+
.transport(TcpServerTransport.create(8081))
255263
.start()
256264
.block();
257265
```
258266

259-
#### RSocket Client Configuration
260-
This configures a initiator of a connection, typically a client, to handle requests to the `SimpleService` implementation.
261-
```
262-
SimpleServiceServer serviceServer = new SimpleServiceServer(new DefaultSimpleService());
267+
#### RSocket RPC Client common Configuration
268+
The RSocket RPC compiler generates a client as well as a server. The client implements the generated interface. You can configure the client either from an RSocket client connection, or server connection. The following shows how to configure a initiator of a connection, typically a client, to send requests to the `SimpleService` implementation.
263269

264-
RSocketFactory
265-
.connect()
266-
.acceptor(rSocket -> new RequestHandlingRSocket(serviceServer))
267-
.transport(TcpClientTransport.create(8801))
268-
.start()
269-
.block();
270+
```java
271+
RSocket rSocket = RSocketFactory
272+
.connect()
273+
.transport(TcpClientTransport.create(8801))
274+
.start()
275+
.block();
276+
SimpleServiceClient serviceClient = new SimpleServiceClient(rSocket);
270277
```
271278

272-
### RSocket RPC Client Configuration
273-
The RSocket RPC compiler generates a client as well as a server. The client implements the generated interface. You can configure the client either from an RSocket client connection, or server connection.
274-
275-
#### RSocket Server Configuration
279+
#### RSocket RPC client over Server Configuration
276280
This configures the receiver of a connection, typically a server, to call the remote `SimpleService`. Notice that the client is created inside the closure in the acceptor method. The method passes in a variable called `sendingSocket`. This is the RSocket that is the connection to the client. You can make calls to the client *without* receiving requests first, or ever.
277281
```
278282
RSocketFactory.receive()
@@ -297,17 +301,8 @@ RSocketFactory.receive()
297301
.block();
298302
```
299303

300-
#### RSocket Client Configuration
301-
This configures an initiator of a connection, typically a client, to call the remote `SimpleService`.
302-
```
303-
RSocket rSocket = RSocketFactory.connect().transport(TcpClientTransport.create(8801)).start().block();
304-
305-
SimpleServiceClient client = new SimpleServiceClient(rSocket);
306-
307-
```
308-
309304
### Calling the client
310-
One the client is created, it can be called like any other method. Here is an example call the `streamingRequestSingleResponse` method.
305+
Once the client is created, it can be called like any other method. Here is an example call the `streamingRequestSingleResponse` method.
311306
```
312307
SimpleServiceClient client = new SimpleServiceClient(rSocket);
313308
@@ -321,21 +316,8 @@ SimpleResponse response = client.streamingRequestSingleResponse(requests).block(
321316
System.out.println(response.getResponseMessage());
322317
```
323318

324-
The above example streams in 11 items to a server. The server receives the stream, counts the most common words, and then returns a message detailing the data received.
325-
326-
## Release Notes
327-
328-
Please find release notes at [https://github.com/netifi/rsocket-rpc-java/releases](https://github.com/netifi/rsocket-rpc-java/releases).
329-
330-
## Bugs and Feedback
331-
332-
For bugs, questions, and discussions please use the [Github Issues](https://github.com/netifi/rsocket-rpc-java/issues).
333-
334-
## License
335-
Copyright 2017 Netifi Inc.
336-
337-
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
319+
The above example streams in 11 items to a server. The server receives the stream, counts the most common words, and then returns a message detailing the data received.
338320

339-
http://www.apache.org/licenses/LICENSE-2.0
321+
## Next Steps
340322

341-
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
323+
See `rsocket-rpc-examples` for more examples and use-cases.

docs/motivation.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Motivation for RSocket-RPC
2+
3+
As many of us might know, there is an RPC project called gRPC. The gRPC project allows us easily setup RPC communication between several services. Even though the communication is reactive, asynchronous and non-blocking, the current implementation of gRPC does not allow to achieve one of the central goals for Reactive Streams - Backpressure control. At that moment, gRPC uses HTTP/2 as a transport and employee its flow control in order to achieve backpressure. HTTP/2 flow allows only byte-acknowledgment-based flow control, which means there is no specific part of the protocol that can say how many logical-elements a consumer ready to accept. That limitation may impact system stability under high-load which may be either performance degradation or resilience degradation.
4+
5+
Therefore, RSocket-RPC comes for rescue. The central idea of RSocket-RPC is to provide identical communication features as there are in gRPC. As we might remember, gRPC offers Protocol Buffer integration, which along with common data structures generation, allows generating stubs for services. The RSocket-RPC library employees the same techniques and provides the same plugin for stub generation. In turn, RSocket-RPC uses RSocket protocol as an application level transport for message exchange which includes out-of-the-box logical-elements-based backpressure control, therefore offers better resilience without impact on system's performance.
6+
7+
Also, RSocket-RPC is language agnostic and at the current moment provides integration with [JavaScript](https://github.com/rsocket/rsocket-rpc-js) as well as with [Java](https://github.com/rsocket/rsocket-rpc-java).

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
group=io.rsocket.rpc
2-
version=0.2.6.BUILD-SNAPSHOT
2+
version=0.2.5.BUILD-SNAPSHOT

rsocket-rpc-core/build.gradle

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ description = 'RSocket RPC Library'
44

55
dependencies {
66
implementation project (':rsocket-rpc-protobuf')
7-
implementation 'io.opentracing:opentracing-api'
8-
implementation 'javax.inject:javax.inject'
9-
implementation 'javax.annotation:javax.annotation-api'
107
implementation 'com.google.protobuf:protobuf-java'
11-
implementation 'io.rsocket:rsocket-core'
12-
implementation 'io.rsocket:rsocket-transport-netty'
13-
implementation 'io.micrometer:micrometer-core'
8+
9+
api 'io.opentracing:opentracing-api'
10+
api 'javax.inject:javax.inject'
11+
api 'javax.annotation:javax.annotation-api'
12+
api 'io.rsocket:rsocket-core'
13+
api 'io.micrometer:micrometer-core'
1414

1515
protobuf project(':rsocket-rpc-metrics-idl')
1616

@@ -42,7 +42,7 @@ protobuf {
4242
generatedFilesBaseDir = "${projectDir}/src/generated"
4343

4444
protoc {
45-
artifact = "com.google.protobuf:protoc:${ext['protobuf.version']}"
45+
artifact = "com.google.protobuf:protoc"
4646
}
4747
plugins {
4848
rsocketRpc {

0 commit comments

Comments
 (0)