Use emulator

Configures your code to use the emulator instead of the real Pub/Sub service. Applies to C# and Java.

Explore further

For detailed documentation that includes this code sample, see the following:

Code sample

C#

Before trying this sample, follow the C# setup instructions in the Pub/Sub quickstart using client libraries . For more information, see the Pub/Sub C# API reference documentation .

To authenticate to Pub/Sub, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  using 
  
  Google.Api.Gax 
 
 ; 
 using 
  
  Google.Cloud.PubSub.V1 
 
 ; 
 using 
  
 System 
 ; 
 using 
  
 System.Collections.Generic 
 ; 
 using 
  
 System.Threading.Tasks 
 ; 
 public 
  
 class 
  
 EmulatorSupportSample 
 { 
  
 public 
  
 async 
  
 Task 
  
 WithEmulatorAsync 
 ( 
 string 
  
 projectId 
 , 
  
 string 
  
 topicId 
 , 
  
 string 
  
 subscriptionId 
 ) 
  
 { 
  
 // Use EmulatorDetection.EmulatorOrProduction to create service clients that will 
  
 // that will connect to the PubSub emulator if the PUBSUB_EMULATOR_HOST environment 
  
 // variable is set, but will otherwise connect to the production environment. 
  
 // Create the PublisherServiceApiClient using the PublisherServiceApiClientBuilder 
  
 // and setting the EmulatorDection property. 
  
  PublisherServiceApiClient 
 
  
 publisherService 
  
 = 
  
 await 
  
 new 
  
  PublisherServiceApiClientBuilder 
 
  
 { 
  
 EmulatorDetection 
  
 = 
  
  EmulatorDetection 
 
 . 
  EmulatorOrProduction 
 
  
 }. 
 BuildAsync 
 (); 
  
 // Use the client as you'd normally do, to create a topic in this example. 
  
  TopicName 
 
  
 topicName 
  
 = 
  
 new 
  
  TopicName 
 
 ( 
 projectId 
 , 
  
 topicId 
 ); 
  
 publisherService 
 . 
  CreateTopic 
 
 ( 
 topicName 
 ); 
  
 // Create the SubscriberServiceApiClient using the SubscriberServiceApiClientBuilder 
  
 // and setting the EmulatorDection property. 
  
  SubscriberServiceApiClient 
 
  
 subscriberService 
  
 = 
  
 await 
  
 new 
  
  SubscriberServiceApiClientBuilder 
 
  
 { 
  
 EmulatorDetection 
  
 = 
  
  EmulatorDetection 
 
 . 
  EmulatorOrProduction 
 
  
 }. 
 BuildAsync 
 (); 
  
 // Use the client as you'd normally do, to create a subscription in this example. 
  
  SubscriptionName 
 
  
 subscriptionName 
  
 = 
  
 new 
  
  SubscriptionName 
 
 ( 
 projectId 
 , 
  
 subscriptionId 
 ); 
  
 subscriberService 
 . 
  CreateSubscription 
 
 ( 
 subscriptionName 
 , 
  
 topicName 
 , 
  
 pushConfig 
 : 
  
 null 
 , 
  
 ackDeadlineSeconds 
 : 
  
 60 
 ); 
  
 // Create the PublisherClient using PublisherClientBuilder to set the EmulatorDetection property. 
  
  PublisherClient 
 
  
 publisher 
  
 = 
  
 await 
  
 new 
  
  PublisherClientBuilder 
 
  
 { 
  
 TopicName 
  
 = 
  
 topicName 
 , 
  
 EmulatorDetection 
  
 = 
  
  EmulatorDetection 
 
 . 
  EmulatorOrProduction 
 
  
 }. 
 BuildAsync 
 (); 
  
 // Use the client as you'd normally do, to send a message in this example. 
  
 await 
  
 publisher 
 . 
  PublishAsync 
 
 ( 
 "Hello, Pubsub" 
 ); 
  
 await 
  
 publisher 
 . 
  ShutdownAsync 
 
 ( 
 TimeSpan 
 . 
 FromSeconds 
 ( 
 15 
 )); 
  
 // Create the SubscriberClient using SubscriberClientBuild to set the EmulatorDetection property. 
  
  SubscriberClient 
 
  
 subscriber 
  
 = 
  
 await 
  
 new 
  
  SubscriberClientBuilder 
 
  
 { 
  
 SubscriptionName 
  
 = 
  
 subscriptionName 
 , 
  
 EmulatorDetection 
  
 = 
  
  EmulatorDetection 
 
 . 
  EmulatorOrProduction 
 
  
 }. 
 BuildAsync 
 (); 
  
 List<PubsubMessage> 
  
 receivedMessages 
  
 = 
  
 new 
  
 List<PubsubMessage> 
 (); 
  
 // Use the client as you'd normally do, to listen for messages in this example. 
  
 await 
  
 subscriber 
 . 
  StartAsync 
 
 (( 
 msg 
 , 
  
 cancellationToken 
 ) 
  
 = 
>  
 { 
  
 receivedMessages 
 . 
 Add 
 ( 
 msg 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Received message {msg.MessageId} published at {msg.PublishTime.ToDateTime()}" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Text: '{msg.Data.ToStringUtf8()}'" 
 ); 
  
 // In this example we stop the subscriber when the message is received. 
  
 // You may leave the subscriber running, and it will continue to received published messages 
  
 // if any. 
  
 // This is non-blocking, and the returned Task may be awaited. 
  
 subscriber 
 . 
  StopAsync 
 
 ( 
 TimeSpan 
 . 
 FromSeconds 
 ( 
 15 
 )); 
  
 // Return Reply.Ack to indicate this message has been handled. 
  
 return 
  
 Task 
 . 
 FromResult 
 ( 
  SubscriberClient 
 
 . 
  Reply 
 
 . 
  Ack 
 
 ); 
  
 }); 
  
 } 
 } 
 

Java

Before trying this sample, follow the Java setup instructions in the Pub/Sub quickstart using client libraries . For more information, see the Pub/Sub Java API reference documentation .

To authenticate to Pub/Sub, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  import 
  
 com.google.api.core. ApiFuture 
 
 ; 
 import 
  
 com.google.api.gax.core. CredentialsProvider 
 
 ; 
 import 
  
 com.google.api.gax.core. NoCredentialsProvider 
 
 ; 
 import 
  
 com.google.api.gax.grpc. GrpcTransportChannel 
 
 ; 
 import 
  
 com.google.api.gax.rpc. FixedTransportChannelProvider 
 
 ; 
 import 
  
 com.google.api.gax.rpc. TransportChannelProvider 
 
 ; 
 import 
  
 com.google.cloud.pubsub.v1. Publisher 
 
 ; 
 import 
  
 com.google.cloud.pubsub.v1. TopicAdminClient 
 
 ; 
 import 
  
 com.google.cloud.pubsub.v1. TopicAdminSettings 
 
 ; 
 import 
  
 com.google.protobuf. ByteString 
 
 ; 
 import 
  
 com.google.pubsub.v1. PubsubMessage 
 
 ; 
 import 
  
 com.google.pubsub.v1. Topic 
 
 ; 
 import 
  
 com.google.pubsub.v1. TopicName 
 
 ; 
 import 
  
 io.grpc.ManagedChannel 
 ; 
 import 
  
 io.grpc.ManagedChannelBuilder 
 ; 
 public 
  
 class 
 UsePubSubEmulatorExample 
  
 { 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 ... 
  
 args 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 String 
  
 hostport 
  
 = 
  
 System 
 . 
  getenv 
 
 ( 
 "PUBSUB_EMULATOR_HOST" 
 ); 
  
 ManagedChannel 
  
 channel 
  
 = 
  
 ManagedChannelBuilder 
 . 
 forTarget 
 ( 
 hostport 
 ). 
 usePlaintext 
 (). 
 build 
 (); 
  
 try 
  
 { 
  
  TransportChannelProvider 
 
  
 channelProvider 
  
 = 
  
  FixedTransportChannelProvider 
 
 . 
 create 
 ( 
  GrpcTransportChannel 
 
 . 
 create 
 ( 
 channel 
 )); 
  
  CredentialsProvider 
 
  
 credentialsProvider 
  
 = 
  
  NoCredentialsProvider 
 
 . 
 create 
 (); 
  
 // Set the channel and credentials provider when creating a `TopicAdminClient`. 
  
 // Can be done similarly for a `SubscriptionAdminClient`. 
  
  TopicAdminClient 
 
  
 topicAdminClient 
  
 = 
  
  TopicAdminClient 
 
 . 
 create 
 ( 
  
  TopicAdminSettings 
 
 . 
 newBuilder 
 () 
  
 . 
 setTransportChannelProvider 
 ( 
 channelProvider 
 ) 
  
 . 
 setCredentialsProvider 
 ( 
 credentialsProvider 
 ) 
  
 . 
 build 
 ()); 
  
  TopicName 
 
  
 topicName 
  
 = 
  
  TopicName 
 
 . 
 of 
 ( 
 "my-project-id" 
 , 
  
 "my-topic-id" 
 ); 
  
  Topic 
 
  
 topic 
  
 = 
  
 topicAdminClient 
 . 
  createTopic 
 
 ( 
 topicName 
 ); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Created topic: " 
  
 + 
  
 topic 
 . 
  getName 
 
 ()); 
  
 // Set the channel and credentials provider when creating a `Publisher`. 
  
 // Can be done similarly for a `Subscriber`. 
  
  Publisher 
 
  
 publisher 
  
 = 
  
  Publisher 
 
 . 
 newBuilder 
 ( 
 topicName 
 ) 
  
 . 
 setChannelProvider 
 ( 
 channelProvider 
 ) 
  
 . 
 setCredentialsProvider 
 ( 
 credentialsProvider 
 ) 
  
 . 
 build 
 (); 
  
 String 
  
 message 
  
 = 
  
 "Hello World!" 
 ; 
  
  ByteString 
 
  
 data 
  
 = 
  
  ByteString 
 
 . 
  copyFromUtf8 
 
 ( 
 message 
 ); 
  
  PubsubMessage 
 
  
 pubsubMessage 
  
 = 
  
  PubsubMessage 
 
 . 
 newBuilder 
 (). 
  setData 
 
 ( 
 data 
 ). 
 build 
 (); 
  
 ApiFuture<String> 
  
 messageIdFuture 
  
 = 
  
  publish 
 
er . 
  publish 
 
 ( 
 pubsubMessage 
 ); 
  
 String 
  
 messageId 
  
 = 
  
 messageIdFuture 
 . 
 get 
 (); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Published message ID: " 
  
 + 
  
 messageId 
 ); 
  
 } 
  
 finally 
  
 { 
  
 channel 
 . 
 shutdown 
 (); 
  
 } 
  
 } 
 } 
 

What's next

To search and filter code samples for other Google Cloud products, see the Google Cloud sample browser .

Create a Mobile Website
View Site in Mobile | Classic
Share by: