Ah yes,
So I've done something similar, however the problem is that the pub sub
extension would be a library. So using the 'Broadcasts' enum wouldn't scale
as I couldn't foresee all the events that a particular service might
implement and I'd want the developer to define their own enum. So I guess
my question is, how can I take an enum or string constant (which an enum is
generated to in some libraries).
Essentially, since I can't define RPC methods as they're async and don't
reference other services, I'm looking for a way to reference other messages
and constants in my options. Perhaps there's another way of going about it?
I could just define strings, but then you would have to make sure they're
the same between protobufs and using a code generator, I would have to find
that other protobuf and link them together
On Tuesday, 11 April 2017 22:29:29 UTC+1, Feng Xiao wrote:
>
> Not sure if this is what you are asking for, but the following proto
> compiles for me:
> syntax = "proto3";
> import "google/protobuf/descriptor.proto";
> enum Broadcasts {
> HELLO = 0;
> CREATED = 1;
> }
> enum ReturnTypes {
> HELLO_REPLY = 0;
> }
> message Publisher {
> Broadcasts name = 1;
> ReturnTypes returns = 2;
> }
> message Subscriber {
> Broadcasts name = 1;
> }
> message Subscribers {
> repeated Publisher publisher = 1;
> repeated Subscriber subscriber = 2;
> }
>
> extend google.protobuf.ServiceOptions {
> Subscribers subscribers = 4444;
> }
>
> service Greeter {
> option (subscribers) = {
> publisher {
> name: HELLO
> returns: HELLO_REPLY
> }
> subscriber {
> name: HELLO
> }
> subscriber {
> name: CREATED
> }
> };
> }
>
> On Tue, Apr 11, 2017 at 4:14 AM, 'Alex Barlow' via Protocol Buffers <
> [email protected] <javascript:>> wrote:
>
>> Hi all,
>> I was hoping for some advice for designing my publish subscribe system on
>> top of protobuf and rpc.
>>
>> The idea is that a developer may have defined set of messages, a normal
>> service and some rpc methods which they then augment with some publishers
>> and subscribers.
>>
>> For example, given this ordinary service..
>>
>> syntax = "proto3";
>> package helloworld;
>>
>> service Greeter {
>> rpc SayHello (HelloRequest) returns (HelloReply) {}
>> }
>>
>> message HelloRequest {
>> string name = 1;
>> }
>>
>> message HelloReply {
>> string message = 1;
>> }
>>
>> I'm thinking of creating my own extensions and options so a developer can
>> describe which messages it publishes and what messages it subscribes to but
>> I'm struggling with how to implement it, here's a proposal of a annotated
>> proto
>>
>> syntax = "proto3";
>> package helloworld;
>>
>> enum Broadcasts {
>> HELLO = 0;
>> }
>>
>> service Greeter {
>> rpc SayHello (HelloRequest) returns (HelloReply) {}
>>
>> option (subscribers) = {
>> publisher {
>> name: HELLO
>> returns: HelloReply
>> }
>>
>> subscriber {
>> name: HELLO
>> }
>>
>> subscriber {
>> name: some_service.CREATED
>> }
>> };
>>
>> }
>>
>> message HelloRequest {
>> string name = 1;
>> }
>>
>> message HelloReply {
>> string message = 1;
>> }
>>
>> The problem is in defining the .proto for the subscribers option, how do
>> I create a message/extention which accepts an ENUM or Message type as a
>> value to be set.
>>
>> I'm also open to completely different ways of designing this, but I was
>> hoping to have a way to define subscribers and publishers in a typed way
>> that shows me the dependencies so I can then generate the code.
>>
>> Any help would be appreciated! Thanks
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Protocol Buffers" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected]
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/protobuf.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
You received this message because you are subscribed to the Google Groups
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.