3

Ich begann mit dem Pubsub-Emulator, um meine grundlegenden Implementierungen zu testen, und stieß auf ein Problem, während ich versuchte, ein neues Thema zu erstellen.Thema auf dem Pubsub-Emulator erstellen

Mein Emulator hört auf localhost: 8085, und wenn ich das Thema über das

api erstellen
PUT http://localhost:8085/v1/projects/testproject/topics/test 

alles funktioniert und das Thema erstellt wird. Aber wenn ich den folgenden Code-Schnipsel nichts funktioniert wie beabsichtigt und kein Thema erstellt wird:

TopicName topicName = TopicName.create("testproject", "test"); 
    ChannelProvider channelProvider = 
      TopicAdminSettings.defaultChannelProviderBuilder() 
       .setEndpoint("localhost:8085") 
       .setCredentialsProvider(
         FixedCredentialsProvider.create(NoCredentials.getInstance())) 
       .build(); 
    TopicAdminClient topicClient = TopicAdminClient.create(
      TopicAdminSettings.defaultBuilder().setChannelProvider(channelProvider).build()); 
     topicClient.createTopic(topicName); 

beim Laufen diese die Emulator-Protokolle

[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.grpc.GrpcServer$3 operationComplete 
[pubsub] INFORMATION: Adding handler(s) to newly registered Channel. 
[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead 
[pubsub] INFORMATION: Detected non-HTTP/2 connection. 
[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.netty.NotFoundHandler handleRequest 
[pubsub] INFORMATION: Unknown request URI: /bad-request 
[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.grpc.GrpcServer$3 operationComplete 
[pubsub] INFORMATION: Adding handler(s) to newly registered Channel. 
[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead 
[pubsub] INFORMATION: Detected non-HTTP/2 connection. 
[pubsub] Apr 27, 2017 1:10:47 PM io.gapi.emulators.netty.NotFoundHandler handleRequest 
[pubsub] INFORMATION: Unknown request URI: /bad-request 

...  

[pubsub] Apr 27, 2017 1:10:49 PM io.gapi.emulators.grpc.GrpcServer$3 operationComplete 
[pubsub] INFORMATION: Adding handler(s) to newly registered Channel. 
[pubsub] Apr 27, 2017 1:10:49 PM io.gapi.emulators.netty.HttpVersionRoutingHandler channelRead 
[pubsub] INFORMATION: Detected non-HTTP/2 connection. 

Bin ich etwas auf meinem ChannelProvider fehlt? Oder habe ich meinen TopicAdminClient nicht richtig konfiguriert? Ich sehe nicht, was falsch ist, seit ich this as reference verwendet habe.

Vielleicht kann mir jemand dabei helfen.

Antwort

2

Kanäle, die für die Kommunikation mit dem Emulator verwendet werden, müssen die negotiationType-Eigenschaft auf NegotiationType.PLAINTEXT setzen. Das bedeutet, dass Sie eine benutzerdefinierte ChannelProvider erstellen müssen. So etwas wie das Folgende sollte funktionieren:

public class PlainTextChannelProvider implements ChannelProvider { 
    @Override 
    public boolean shouldAutoClose() { 
    return false; 
    } 

    @Override 
    public boolean needsExecutor() { 
    return false; 
    } 

    @Override 
    public ManagedChannel getChannel() throws IOException { 
    return NettyChannelBuilder.forAddress("localhost", 8085) 
     .negotiationType(NegotiationType.PLAINTEXT) 
     .build(); 
    } 

    @Override 
    public ManagedChannel getChannel(Executor executor) throws IOException { 
    return getChannel(); 
    } 
} 
+0

Vielen Dank, das hat zum Erstellen von Themen und zum Veröffentlichen von Nachrichten beigetragen. Muss ich etwas Ähnliches für den Subscriber.Listener implementieren? Ich setze den gleichen channelProvider für den Subscriber aber beim Aufruf von subscriber.stopAsync(), es wirft immer eine java.util.concurrent.RejectedExecutionException und (es scheint zufällig) tut oder nicht zieht Nachrichten, fehlt mir hier etwas? –

+0

Sie müssen die gleiche Art von ChannelProvider auch für Ihren Abonnenten verwenden, ja. Es ist schwer zu sagen, was die RejectedExecutionException verursacht. Ich glaube nicht, dass dies ein Problem für den Abonnenten oder Emulator ist, sondern möglicherweise spezifisch für Ihren Code bei der Anmeldung, für alle von Ihnen verwendeten Executors oder für die Lebensdauer von Objekten in Ihrer App. –

+0

Ich öffnete eine andere Frage, damit ich eine detailliertere Beschreibung geben kann [link] (http://stackoverflow.com/questions/43786716/subscriber-stopasync-results-in-rejectedexecutionexception) –

Verwandte Themen