Metadata-Version: 2.1
Name: busie-consumer
Version: 1.0.0
Summary: Base Kafka Consumer for Busie Projects
Home-page: https://bradyperry@bitbucket.org/busie/busie-consumer.git
Author: Brady Perry
Author-email: brady@getbusie.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: confluent-kafka

# Busie Consumer

A base consumer package for Busie projects. Abstracts polling and configuration setup away from the end user and exposes basic api for starting the poll process.

## Installation

`pip install busie-consumer`

## Usage
```python
from busie_consumer import BaseConsumer

CONFIG = {
    'bootstrap.servers': 'localhost:9092',
    # Other Config as necessary
}

consumer = BaseConsumer(topics=['some-topic', 'another'], config=CONFIG)

for message in consumer.start():
    handle_message(message)

# It may also be helpful to extend this base class and provide helper methods

class HigherLevelConsumer(Consumer):
    def handle_message(self, message):
        # process the message
        reply_topic, reply = determine_reply(message)
        self.send_reply(topic=reply_topic, message=reply, key=message.key())
consumer = HigherLevelConsumer(topics=['topic'], config=CONFIG)

for msg in consumer.start():
    consumer.handle_message(msg)

```

## API

### BaseConsumer

#### Public Methods
* `BaseConsumer(topics=None, config=None)`: Constructor
    * **required** param `topics`: An iterable of strings containing topic names
    * **required** param `config`: A `dict` containing Kafka config **Note** `config` must have `bootstrap.servers` and `group.id` entries
* `start()`: Generator methods. initiates polling. returns a generator
* `close()`: Closes the consumer
* `send_reply(topic=None, message=None, key=None)`: Invokes a producer and uses it to send a reply to the desired topic. Especially helpful for the `Saga Orchestrator` Pattern
**Note** The producer assumes the same config as the consumer class
    * **required** param `topic`: A string representing the desired topic name
    * **required** param `message`: The data to send to the desired topic.
    * **required** param `key`: The desired key for the message


