我知道Apache Thrift和ZeroMQ是属于不同类别的软件,并且要进行比较并不容易,因为它是一个苹果与橙色的比较.但我不知道他们为什么属于不同的类别.他们是不是都习惯在不同服务之间传递数据,这些服务可能会也可能不会用不同的语言编写?
我何时应该使用Thrift?何时应该使用消息队列?
我是一个缺乏经验的Java开发人员,试图围绕一些基本的中间件/ SOA概念和技术,特别是:
在网上/维基百科上查看每一个之后,我能够(大部分)获得这些中的每一个都不错的定义.我不理解的是所有这些技术/概念如何在后端协同工作以提供第二/业务层解决方案.
有人可以举一个使用所有这些技术/概念的架构的例子,并解释它们在整体解决方案中扮演的角色吗?一旦我看到一个工作示例,我相信它会帮助我连接大部分点.
编辑:由于我添加了赏金,我有几个答案建议阅读书籍.虽然我很欣赏这里的所有反馈,但我根本无法分享300个声望点的答案,基本上归结为"RTM"(特别是当我平了,并且买不起手册!)重申,赏金和明确的答案将发送给能够在一个有意义的实际例子中击中所有这些子弹的人.这不一定是中间件的纲要!只是一段或两段,展示了如何将所有这些结合在一起以生成Java业务层解决方案.再次感谢.
我正在使用C#将消息写入消息队列,如下所示:
queue.Send(new Message("message"));
Run Code Online (Sandbox Code Playgroud)
我正在尝试阅读如下消息:
Messages messages = queue.GetAllMessages();
foreach(Message m in messages)
{
String message = m.Body;
//do something with string
}
Run Code Online (Sandbox Code Playgroud)
但是我收到一条错误消息,上面写着:"找不到能够读取此消息的格式化程序."
我究竟做错了什么?
我有2项服务.他们俩都需要订阅同一个频道.
这两项服务是负载平衡的.每个服务都在多个服务器上运行
那么我怎样才能确定每个服务的1个实例只消耗该通道的消息.
这是Redis支持的吗?
谢谢
我正在学习消息传递系统,但对这些术语感到困惑。
下面的所有消息传递系统都提供了具有不同功能集的服务之间的松散耦合。
queue - FIFO,拉动机制,每个队列有 1 个消费者,但有任意数量的生产者?
message bus- 发布/订阅模型,任意数量的消费者和任意数量的生产者处理消息?是Azure Service Bus的实现message bus?
event bus - 发布/订阅模型,任意数量的消费者和任意数量的生产者处理事件?
就术语而言,人们是否可以互换使用message bus和event bus?
事件和消息有什么区别?在这种情况下,这些只是同义词吗?
event hub- 发布/订阅模型,分区,重放,消费者可以将事件存储在外部存储中或接近实时数据分析。究竟什么是事件中心?
event grid- 它可以用作事件中心的下游服务。它究竟做了哪些event hub没有做的事情?
有人可以提供一些历史背景,说明每种技术如何演变为另一种技术,每种技术都与一些实际用例相关联吗?
我发现消息总线与消息队列有帮助
message-queue servicebus azureservicebus azure-eventhub azure-eventgrid
在我的应用程序中加载的第一个Activity是一个初始化活动,一旦完成,它就会加载一个新的Activity.我想确保如果用户按下"后退",他们会直接进入启动器,而不是初始化屏幕.旁注,这是最好的方法,还是用某种Intent Flag做得更好?
在新活动上调用startActivity()之后调用finish()是否正确?
onCreate() {
...
startActivity(new Intent(this, NextActivity.class));
finish();
...
}
Run Code Online (Sandbox Code Playgroud)
我仍然采用整个'Message Queue'方法在Android中做事,我的假设是从我的第一个Activity的onCreate()调用startActivity()然后finish ()将记录消息队列中的每个相应消息,但是在继续开始下一个Activity并完成我的第一个Activity之前完成onCreate()的执行.这是正确的理解吗?
我知道,为了带来巨大的可扩展性和可靠性,SQS可以进行广泛的资源并行化.它使用冗余服务器甚至是小队列,甚至发布到队列的消息也作为多个副本冗余存储.这些是阻止它像RabbitMQ那样完全一次交付的因素.我看到甚至已删除的消息正在传递.
对开发人员的影响是他们需要为多个消息传递做好准备.亚马逊声称这不是一个问题,但事实上,开发人员必须使用一些同步构造,如数据库事务锁或dynamo-db条件写.这两者都降低了可扩展性.
鉴于重复传递问题,消息不可见时段功能如何保持?该邮件不保证不可见.如果开发者必须自己安排同步,那么隐形期间会带来什么好处.我已经看到消息重新传递,即使它们应该是隐形的.
这里我包括一些参考
如何检查消息队列是否已存在?
我有2个不同的应用程序,一个创建队列,另一个从该队列读取.
因此,如果我首先运行从队列中读取的客户端,而不是崩溃.
所以为了避免我想首先检查队列是否存在.
这是我如何读取队列的代码片段:
QueueingBasicConsumer <ConsumerName> = new QueueingBasicConsumer(<ChannelName>);
<ChannelName>.BasicConsume("<queuename>", null, <ConsumerName>);
BasicDeliverEventArgs e = (BasicDeliverEventArgs)<ConsumerName>.Queue.Dequeue();
Run Code Online (Sandbox Code Playgroud) 关于消息代理(例如RabbitMQ和面向消息的中间件)之间的区别,我有点困惑.除了维基百科上的内容之外,我找不到太多信息.在搜索MOM时,我在AMQP上找到有关MOM协议的信息.这是什么意思?那妈妈是什么?我也读过RabbitMQ实现了AMPQ协议..为什么这会让RabbitMQ成为一个消息代理?消息代理和MOM是一回事吗?
希望有些人可以解开我的困惑.谢谢
想象一下,我希望有一个小型的工作无人机网络可能在不同的线程上,可能在不同的进程上,甚至在不同的PC上.工作项由中央程序创建.
我正在寻找一个现有的产品或服务,它将为我做这一切.我知道有MSMQ和MQSeries.MQSeries太贵了.众所周知,MSMQ不可靠.数据库支持的系统没问题,但我不想拥有/管理/写它.我想使用别人的工作队列系统.
相关文章:
message-queue ×10
.net ×2
c# ×2
queue ×2
rabbitmq ×2
amazon-sqs ×1
amqp ×1
android ×1
comparison ×1
ejb-3.0 ×1
java ×1
jms ×1
mom ×1
not-exists ×1
redis ×1
servicebus ×1
soa ×1
thrift ×1
zeromq ×1