我有一个运行Rabbitmq客户端并使用队列消息的android服务。客户端可以随时接收消息,所以我通过startService启动服务(不是绑定方法)。所以问题是我用什么样的沟通机制来从服务与不同活动进行沟通:绑定还是通知?绑定不会是有用的,因为接收到的msg可能与可见的不同活动相关。并且创建模型层以处理在服务队列中接收到的许多不同msgs成为一项挑战......任何想法和指针?处理Android服务中的Rabbitmq客户端收到的消息
1
A
回答
2
使用消息队列的标准方式如下:您应该为消息添加某种元数据。然后按处理程序时处理消息确定与这样的元数据的帮助确切的类应处理您的消息。在这种情况下使用策略模式非常有用。使用这种技术,您可以轻松地使用多个处理程序处理您的消息。
元数据可能是非常不同的:开始的形式有些字段值(如标签为例),或者你可以从特定的类或接口等扩展你的消息......
回答你问题的第二部分。是的,当然如果你使用队列,它应该有一个消费者。消费者应该像消息管理员一样玩。为每条消息分配新线程是一个糟糕的主意,我想如果你想在你的应用中使用多个线程,你最好使用线程池。但无论如何,线程数量不应该太高,因为它会严重影响你的性能。说到消费者决定消息处理逻辑的方式,或者这个逻辑可以放在线程内部,这将处理具体的消息 - 我认为这两种变体都是可能的。每个人都有自己的优点和缺点。但是我认为这个逻辑更好地提供给消费者,因为消费者管理队列中的消息,而这个任务更接近于消息管理,然后是消息处理本身。
0
在我来说,我用EventBus:https://github.com/greenrobot/EventBus
我所有的活动延伸到abstractOne至极已在订阅方法:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onAlert(MyObject object) {
...
}
,并在我的服务,我只是发布消息:
EventBus.getDefault().post(<MyObject>);
相关问题
- 1. 处理客户端/服务器消息?
- 2. 服务器似乎没有收到客户端消息ANDROID
- 3. C服务器没有收到Java/Android客户端消息
- 4. Android客户端没有收到消息
- 5. Socket.IO服务器没有收到来自客户端的消息
- 6. 确认客户端已收到来自服务器的消息
- 7. WebSocket Javascript客户端未收到来自服务器的消息
- 8. 在TCP客户端/服务器程序中未收到消息
- 9. RabbitMQ的消息与QPID 0.32客户端
- 10. Pika RabbitMQ客户端异步消息处理
- 11. TCP客户端的消息处理
- 12. 客户端(android)从服务器接收消息(java)
- 13. 消息,从服务器的客户端
- 14. Android:绑定服务同时处理来自客户端的多个消息
- 15. Java多客户端服务器不接收来自客户端的消息?
- 16. 服务器在客户端断开连接后收到消息
- 17. Nodejs,客户端并不总是收到服务器消息
- 18. Android客户端没有收到来自node.js服务器的socket.io消息
- 19. WebServices的服务器 - 客户端,RabbitMQ的
- 20. socket.io客户端不接收来自服务器的消息
- 21. TCP客户端不接收服务器的消息
- 22. 服务器无法接收来自客户端的消息
- 23. C#TCP客户端发送消息,但服务器未接收到该消息
- 24. MQTT客户端未收到消息
- 25. Pyro4客户端没有收到消息
- 26. socket.io客户端没有收到消息
- 27. 客户端没有收到SignalR消息
- 28. JMS客户端不会收到消息
- 29. 的Objective-C的RabbitMQ客户没有收到消息
- 30. C#Tcp客户端不能发送消息到Android服务器
感谢您的指导,我正在寻找更多的解决方案,涉及线程,分配一个线程,每个消息从队列中消耗,并在线程解析味精收到..所以我有一个基于元数据的messageHandler/Controller类shld将msg移交给新线程中的匹配类...你说什么?我是在正确的方向...像这样我需要有1个控制器类,多个处理程序类(每个消息类型)我在哪里incooperate线程? – baboo
查看我的答案更新。 – Ph0en1x