Gcpc
Google Cloud Pub/Sub Client for Ruby.
Gcpc provides the implementation of the publisher / subscriber for Google Cloud Pub/Sub. You can add some functionality to the publisher / subscriber as interceptors.
Installation
Add this line to your application's Gemfile:
gem 'gcpc'
And then execute:
$ bundle
Or install it yourself as:
$ gem install gcpc
Usage
gcpc
have publisher and subscriber implementation of Google Cloud Pub/Sub.
Publisher
To use Gcpc::Publisher
, pleaese initialize Gcpc::Publisher
with some configurations.
publisher = Gcpc::Publisher.new(
project_id: "<project id>",
topic: "<topic name>",
credentials: "/path/to/credentials",
)
Then, simply call Gcpc::Publisher#publish
to post a message!
publisher.publish("<message payload>")
Interceptors
By using interceptors, you can add some functionality to the publisher.
For example, you can add logging functionality by adding LogInterceptor
as shown below.
class LogInterceptor < Gcpc::Publisher::BaseInterceptor
MyLogger = Logger.new(STDOUT)
# @param [String] data
# @param [Hash] attributes
def publish(data, attributes)
MyLogger.info "[Interceptor Log] publish data: \"#{data}\", attributes: #{attributes}"
yield data, attributes
end
end
publisher = Gcpc::Publisher.new(
project_id: "<project id>",
topic: "<topic name>",
interceptors: [LogInterceptor],
credentials: "/path/to/credentials",
)
publisher.publish("<message payload>")
Publisher Example
A full example code is in publisher-example. Please see it.
Subscriber
To use Gcpc::Subscriber
, pleaese initialize Gcpc::Subscriber
with some configurations.
subscriber = Gcpc::Subscriber.new(
project_id: "<project id>",
subscription: "<subscription name>",
credentials: "/path/to/credentials",
)
Then, call Gcpc::Subscriber#handle
to register a handler. A registered handler executes #handle
callback for each published message.
class NopHandler < Gcpc::Subscriber::BaseHandler
# @param [String] data
# @param [Hash] attributes
# @param [Google::Cloud::Pubsub::ReceivedMessage] message
def handle(data, attributes, message)
# Do nothing. Consume only.
end
end
subscriber.handle(NopHandler)
To start subscribing, please call Gcpc::Subscriber#start
. It does not return, and run subscribing loops in it.
subscriber.run
Signal Handling
By default, you can stop a subscriber process by sending SIGINT
, SIGTERM
, or SIGKILL
signals.
If you want to use other signals, please pass signals to #run
.
subscriber.run(['SIGINT', 'SIGTERM', 'SIGSTOP', 'SIGTSTP'])
Interceptors
By using interceptors, you can add some functionality to the subscriber.
For example, you can add logging functionality by adding LogInterceptor
as shown below.
class LogInterceptor < Gcpc::Subscriber::BaseInterceptor
MyLogger = Logger.new(STDOUT)
# @param [String] data
# @param [Hash] attributes
# @param [Google::Cloud::Pubsub::ReceivedMessage] message
def handle(data, attributes, message)
MyLogger.info "[Interceptor Log] subscribed a message: #{message}"
yield data, attributes, message
end
end
subscriber = Gcpc::Subscriber.new(
project_id: "<project id>",
subscription: "<subscription name>",
interceptors: [LogInterceptor],
credentials: "/path/to/credentials",
)
Subscriber Example
A full example code is in subscriber-example. Please see it.
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run bundle exec rspec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/wantedly/gcpc.
License
The gem is available as open source under the terms of the MIT License.