Tag: 消息传递

Erlang / OTP消息是否可靠? 消息是否可以重复?

长版本: 我是erlang的新手,并考虑将其用于可扩展的体系结构。 我发现这个平台的许多支持者都鼓吹其可靠性和容错性。 然而,我很难理解在这个系统中如何实现容错,在这个系统中消息在瞬态存储器中排队。 我明白,可以安排一个主pipe层级来重生死亡的进程,但是我一直没有find关于重新进行的进程的影响的讨论。 飞行中的消息和部分完成的工作在垂死的节点上丢失了什么? 当消费者stream程死亡时,所有的生产者是否都会自动转发消息? 如果不是的话,这怎么可以被认为是容错? 如果是这样,什么阻止了一个被处理的消息 – 但不是很确认 – 被转发,因此被不适当地重新处理? (我认识到这些问题并不是erlang所特有的,在任何分布式处理系统中都会出现类似的问题,但是erlang的爱好者似乎声称这个平台使得这一切都变得“容易” 假设消息被重新传输,我可以很容易的想象一个情况,即一个复杂的消息传递链的下游影响可能在故障后变得非常混乱。 如果没有某种沉重的分布式事务系统,我不明白如何在不重复每一个过程的情况下保持一致性和正确性。 我的应用程序代码是否必须始终强制执行约束以防止事务被多次执行? 简洁版本: 分布式erlang进程是否受到重复消息的影响? 如果是这样,重复保护(即幂等)应用责任,或者erlang / OTP以某种方式帮助我们呢?

活动与服务之间的沟通

我正在尝试为Android制作自己的MusicPlayer。 我遇到问题的地方是在后台运行一些东西。 主要活动pipe理GUI,直到现在所有的歌曲都在播放。 我想分开GUI和音乐播放课程。 我想把音乐pipe理部分放在服务中,并保留现在的其他东西。 我的问题是我无法组织Activity和Service之间的通信,因为它们之间发生了很多的通信,包括两个方向的移动对象。 我尝试了很多技术,我在这里searchStack Overflow,但每次遇到问题。 我需要服务能够发送对象到活动,反之亦然。 当我添加小部件时,我也希望它能够与服务进行通信。 任何提示都赞赏,如果你需要源代码的地方评论下面,但现在在这个过渡变得混乱。 有没有更多的高级教程比调用一个从服务返回随机数的方法? :P 编辑:可能的解决scheme是使用RoboGuice库和注射移动对象

如何发送和接收广播消息

我试图在标签内的两个活动之间传递数据。 我正在尝试使用sendBroadcast。 设置了断点,我永远不会到达OnReceive。 清单: <activity android:name=".WebResults" android:label="@string/app_name"> <intent-filter> <action android:name="com.toxy.LOAD_URL" /> </intent-filter> </activity> 活动发件人: Intent intent=new Intent(getApplicationContext(),WebResults.class); intent.setAction("com.toxy.LOAD_URL"); intent.putExtra("url",uri.toString()); sendBroadcast(intent); 活动接收者: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter filter = new IntentFilter("com.toxy.LOAD_URL"); this.registerReceiver(new Receiver(), filter); } private class Receiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { String url = arg1.getExtras().getString("url"); […]

Java消息传递:ActiveMQ,Mule,ServiceMix和Camel之间的区别

我是Messaging的新手,想知道ActiveMQ , Mule , ServiceMix和Camel之间的区别 任何人都知道这些产品是如何不同的? 提前致谢 ! 编辑:也想知道任何好的地方/资源来学习这些东西。

用芹菜取消已经执行的任务?

我一直在阅读文档和search,但似乎无法find一个直接的答案: 你能取消一个已经执行的任务吗? (如在任务已经开始,需要一段时间,并通过它的一半需要被取消) 我从Celery FAQ的文档中find这个 >>> result = add.apply_async(args=[2, 2], countdown=120) >>> result.revoke() 但是我不清楚这是否会取消排队的任务,或者是否会杀死一个工人正在运行的进程。 谢谢你可以放弃任何光线!

演员模型:为什么是erlang特别的? 或者,为什么你需要另一种语言呢?

我一直在研究学习erlang,因此,一直在阅读(好吧,略读)演员模型。 根据我的理解,actor模型只是一组函数(在erlang中称为“processes”的轻量级线程中运行),它们之间只能通过消息传递进行通信。 在C ++或其他语言中,这似乎相当简单: class BaseActor { std::queue<BaseMessage*> messages; CriticalSection messagecs; BaseMessage* Pop(); public: void Push(BaseMessage* message) { auto scopedlock = messagecs.AquireScopedLock(); messagecs.push(message); } virtual void ActorFn() = 0; virtual ~BaseActor() {} = 0; } 每个进程都是派生的BaseActor的一个实例。 参与者之间只能通过消息传递进行交stream。 (即推)。 行动者注册自己的初始化中央地图,允许其他行为者find他们,并允许中央function贯穿其中。 现在,我明白我错过了,或者更确切地说,在这里重要的一个问题,即:缺乏屈服意味着单个演员可以不公平地消耗过多的时间。 但是跨平台的协程是使C ++变得困难的主要原因吗? (例如Windows有光纤。) 还有什么我失踪,或者是模型真的这是显而易见的? 我绝对不是试图在这里开始一场激烈的战争,我只是想明白我错过了什么,因为这基本上是我已经做了一些有关并发代码的原因。

Actors与线程相比如何工作?

有什么好的和简短的解释演员如何工作相比线程? 一个线程不能被视为一个演员,并发送消息到其他线程? 我看到有些不同,但对我来说不是很清楚。 我可以通过不同的线程使用任何语言的Actor吗?

Firebase onMessageReceived未在后台应用中调用

我正在使用Firebase,并在应用程序处于后台时从我的服务器向我的应用程序发送通知。 通知发送成功,它甚至出现在设备的通知中心,但是当通知出现时,或者即使点击它,我的FCMessagingService中的onMessageReceived方法也不会被调用。 当我testing这个时,我的应用程序在前台,onMessageReceived方法被调用,一切工作正常。 当应用程序在后台运行时发生问题。 这是预期的行为,还是有办法我可以解决这个问题? 这是我的FBMessagingService: import android.util.Log; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; public class FBMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.i("PVL", "MESSAGE RECEIVED!!"); if (remoteMessage.getNotification().getBody() != null) { Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getNotification().getBody()); } else { Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getData().get("message")); } } }

技术或效用最大限度地减lessJava的“热身”时间?

我支持需要低延迟(每个消息处理<300微秒)的Java消息传递应用程序。 但是,我们的分析表明,Sun Java虚拟机一开始运行缓慢,在前5000条消息之后加速。 前5,000个消息的延迟为1-4毫秒。 在大约第一个5000之后,随后的消息具有〜250微秒的延迟,偶尔出现exception值。 通常可以理解,这是Java应用程序的典型行为。 但是,从业务angular度来看,告诉客户他们必须等待JVM“预热”才能看到所需的性能,这是不可接受的。 在处理第一个客户消息之前,应用程序需要“预热” JVM是Sun 1.6.0 Update 4。 解决这个问题的想法: JVM设置,如-XX:CompileThreshold = 添加一个组件在启动时“预热”应用程序,例如通过应用程序发送“假消息”。 在应用程序启动时静态加载应用程序和JDK类,以便在处理客户消息时不从JAR加载类。 一些实用程序或Java代理完成上述两个想法中的一个或两个,以便我不必重新发明轮子。 注意:显然,对于这个解决scheme,我正在查看所有的因素,包括芯片拱形,磁盘types和configuration以及操作系统设置。 但是,对于这个问题,我想集中讨论如何优化Java应用程序,最大限度地减less“热身”时间。