2013-01-22 103 views
1

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

回答

2

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

元数据可能是非常不同的:开始的形式有些字段值(如标签为例),或者你可以从特定的类或接口等扩展你的消息......

回答你问题的第二部分。是的,当然如果你使用队列,它应该有一个消费者。消费者应该像消息管理员一样玩。为每条消息分配新线程是一个糟糕的主意,我想如果你想在你的应用中使用多个线程,你最好使用线程池。但无论如何,线程数量不应该太高,因为它会严重影响你的性能。说到消费者决定消息处理逻辑的方式,或者这个逻辑可以放在线程内部,这将处理具体的消息 - 我认为这两种变体都是可能的。每个人都有自己的优点和缺点。但是我认为这个逻辑更好地提供给消费者,因为消费者管理队列中的消息,而这个任务更接近于消息管理,然后是消息处理本身。

+0

感谢您的指导,我正在寻找更多的解决方案,涉及线程,分配一个线程,每个消息从队列中消耗,并在线程解析味精收到..所以我有一个基于元数据的messageHandler/Controller类shld将msg移交给新线程中的匹配类...你说什么?我是在正确的方向...像这样我需要有1个控制器类,多个处理程序类(每个消息类型)我在哪里incooperate线程? – baboo

+0

查看我的答案更新。 – Ph0en1x

0

在我来说,我用EventBus:https://github.com/greenrobot/EventBus

我所有的活动延伸到abstractOne至极已在订阅方法:

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

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

EventBus.getDefault().post(<MyObject>); 
相关问题