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 .

