Skip to content

shoman2/microagent

 
 

Repository files navigation

MicroAgent

https://travis-ci.org/scailer/microagent.svg?branch=master https://readthedocs.org/projects/microagent/badge/?version=latest&style=flat

The goal of this project is to facilitate the creation of microservices interacting via a signal bus and/or queue broker.

The philosophy of this project is to present a microservice as a software agent that directly interacts only with queues and the event bus, and not with other microservices.

Tool is intended for developing:

  • distributed apps with event-driven architecture
  • distributed apps with data-driven architecture
  • multi-processors apps

Tool provide features:

  • running a periodical tasks (interval or as CRON)
  • specification of signals (events), their sending and receiving via the bus (aioredis)
  • description of queues, sending and receiving messages via the queue broker (aioamqp, kafka, aioredis)
  • limited RPC via signal bus
  • launching sub-services (in the same process)
  • launching a group of microagents (each in a separate process)
  • mocks for bus and broker

See MicroAgent documentation.

class Agent(MicroAgent):

    @on('pre_start')
    async def setup(self):
        pass  # init connections to DB, REDIS, SMTP and other services

    @periodic(period=5)
    async def refresh_cache(self):
        pass  # do something periodicly

    @cron('0 */4 * * *')
    async def send_report(self):
        pass  # do something by schedule

    # subscribe to signals (events)
    @receiver(signals.user_updated, signals.user_deleted)
    async def send_notification(self, **kwargs):
        # send signal (event) to bus
        await self.bus.check_something.send(sender='agent', **kwargs)

    # message consumer from queue
    @consumer(queues.mailer)
    async def send_emails(self, **kwargs):
        # send message to queue
        await self.broker.statistic_collector.send(kwargs)


async def main():
    bus = AIORedisSignalBus('redis://localhost/7')
    broker = AIORedisBroker('redis://localhost/7')

    # usage bus and broker separate from agent
    await bus.started.send('user_agent')
    await broker.mailer(data)

    agent = Agent(bus=bus, broker=broker)
    await agent.start()

Installing

With aioredis backend provide signal bus and list-based queues:

pip install 'microagent[aioredis]'

With aioamqp backend provide queues over AMQP (RabbitMQ):

pip install 'microagent[amqp]'

With kafka backend provide queues over Kafka (experemental):

pip install 'microagent[kafka]'

With pulsar backend provide signal bus (Redis) and list-based queues (Redis):

pip install 'microagent[pulsar]'

About

Tool for agent ecosystem

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.5%
  • Makefile 0.5%