Drop-in processors (because they pattern-match tuples in the tuplespace). (Because of this ad-hoc nature, with proper versioning, multiple implementations can run simultenously and GA-like stuff can be applied).
"Good enough", like word processing and
( Read more... )
I think there is a way to implement this with RabbitMQ. However, it may not be incredibly robust.
It requires a separate server that handles the distributed datastore, such as Rinda. The difference is that when it publishes to the agent, it would publish through RabbitMQ.
What makes this brittle is that agents will have to listen to the message queue from RabbitMQ. This can be abstracted ... but the tight coupling will be a source of trouble.
Agent.register(Blackboard) Blackboard -> sends AMQP queue name (out, take, read) -> Agent Agent subscribes to AMQP queue
Agent outputs to Blackboard via a queue.publish Blackboard receives message, updates tuplespace Matching tuples gets pushed out to the correct Agent
Essentially what I have with the Dataflow library, except more flexible with a distributed tuplespace. I think that solves the problem with the coupling with the JSON marshalling, hm.
Comments 3
It requires a separate server that handles the distributed datastore, such as Rinda. The difference is that when it publishes to the agent, it would publish through RabbitMQ.
What makes this brittle is that agents will have to listen to the message queue from RabbitMQ. This can be abstracted ... but the tight coupling will be a source of trouble.
Agent.register(Blackboard)
Blackboard -> sends AMQP queue name (out, take, read) -> Agent
Agent subscribes to AMQP queue
Agent outputs to Blackboard via a queue.publish
Blackboard receives message, updates tuplespace
Matching tuples gets pushed out to the correct Agent
Essentially what I have with the Dataflow library, except more flexible with a distributed tuplespace. I think that solves the problem with the coupling with the JSON marshalling, hm.
-Q
Reply
include Agent
take [:queried, nil]
def on_query(*args)
# Screen-scrape
s = Scraper.scrape(args)
write [:downloaded, s.id]
end
end
class MapAgent
include Agent
take [:downloaded, nil]
def on_downloaded(*args)
# Map scraped objects
write [:mapped, s.id]
end
end
etc.
Hmm.
-Q
Reply
This can be implemented as a CouchDB plugin. I remember there was a GIS project that works just like that.
-Q
Reply
Leave a comment