处理Rabbit Service中的Rabbitmq客户端收到的消息

时间:2013-01-22 15:13:08

标签: android service architecture rabbitmq

我有一个运行Rabbitmq客户端并消耗队列消息的android服务。客户端可以随时接收消息,因此我通过startService启动服务(不是绑定方法)。那么问题是我使用什么样的通信机制来通过服务与不同的活动进行通信:绑定还是通知?绑定不会那么有用,因为收到的msg可能与不同的活动有关,而不是可见的活动。并且创建一个模型层来处理在服务队列中收到的这么多不同的msg也成为一个挑战......有什么想法和指示吗?

2 个答案:

答案 0 :(得分:2)

使用消息队列的非常标准的方法如下:您应该在消息中添加某种元数据。然后处理消息时按摩处理程序在这样的元数据的帮助下确定,确切的类应该处理您的消息。在这种情况下使用策略模式非常有用。使用这种技术,您可以轻松地使用多个处理程序处理您的消息。

元数据可能非常不同:从某个字段值开始(例如标记),或者您可以从特定的类或接口等扩展您的消息......

回答你问题的第二部分。是的,当然如果你使用队列,它应该有一个消费者。消费者应该像消息管理器一样玩为每条消息分配新线程是个坏主意,如果您想在应用程序中使用多个线程,我认为您最好使用线程池。但无论如何,线程的数量不应该很高,因为它会严重影响你的性能。谈论消费者确定消息句柄逻辑的方式或者这个逻辑可以放在线程中,这将处理具体的消息 - 我认为这两种变体都是可能的。每个人都有自己的利弊。但我认为这种逻辑更好地投入到消费者手中,因为消费者管理来自队列的消息,而这个任务更接近于消息管理,然后是消息处理本身。

答案 1 :(得分:0)

在我的情况下,我使用了EventBus:https://github.com/greenrobot/EventBus

我的所有活动都延伸到了一个具有订阅方法的abstractOne:

@Subscribe(threadMode = ThreadMode.MAIN)
public void onAlert(MyObject object) {
...
}

在我的服务中,我只是发布消息:

EventBus.getDefault().post(<MyObject>);