我目前正在制作一个非常大的基于 Akka 的 Java 应用程序,但我遇到了几个问题,这些问题一直困扰着我。
我当前的包布局看起来有点像这样:
我的 Mobile 类充当 actors 包内的 actor 的主管。
因为我不想为每个 HttpClient 和 Account 创建一组新的 Actors,所以我将它们传递到存储在消息中的消息对象中包,以及接收最终结果的端点ActorRef。然而,这确实创建了一个非常困惑的 messages 包,每个参与者都有不同的消息。例如。 MobileForActor1、Actor1ForMobile、MobileForActor2 等。现在我的问题是,是否有一个约定可用于处理此问题的此类内容,并且是我的结构(Mobile->Actor1->Mobile->Actor2->等)Akka 的方式希望它是,还是我必须对消息进行瀑布式处理(Mobile->Actor1->Actor2->等)?
现在我正在向我的 Mobile actor 发送一个 ConnectMessage,然后它发送给 Actor1,Actor1 对其进行处理并将新消息发送回 Mobile,Mobile 然后将该响应发送给 Actor2,然后循环继续创建新消息基于旧消息。例如。 new Message2(message1.foo, message1.bar, message1.baz, newComputatedResult, newComputatedResult2, etc);
这是好的做法还是我应该包含旧实例(其中可能包含不再有用的信息)并包含新内容?例如。 new Message2(message1, newComputatedResult, newComputatedResult2, etc);
或者我应该做一些完全不同的事情吗?
我考虑过使用 TypedActor,但那些需要使用瀑布模式,而且我不知道如何传递想要接收最终结果的监听器的 ActorRef。
我希望我让自己能够被足够理解,因为英语不是我的母语,而且每个人都清楚这个问题。
我是 Akka 开发新手并且喜欢这个想法,但由于文档没有很好地涵盖这一点,我认为这是最好的询问地点。谢谢阅读!
最佳答案
我会冒昧地发表一些评论来回应这个问题,因为我在 Akka 的学习曲线中处理过同样的问题。我认为您是在询问一些经验法则,因此我的经验法则包含在此处。
首先,创建 Actor 的成本非常低;它们非常轻巧。那么,为什么不为每个 HttpClient 和 Account 创建一个,并根据它们的身份为它们赋予合适的名称呢?这也避免了您必须尽可能多地传递它们,从而整理您的代码。
其次,保持消息名称简短、重点突出并以动词开头。每条消息都应该告诉 Actor 做某事,因此您希望名称通过使用动词来反射(reflect)这一点。
第三,消息集随 Actor 而去。我通常在 actor 类的伴随对象中声明它们,这样使用它们就像 ActorClass.MessageName 除非它在 ActorClass 中,然后它只是 MessageName。
第四,在 Actor 的名字上附加一个计数器。我通常只是将计数器(使用 AtomicInteger)与类型名称(Car-1、Car-2 等)组合在一起。
如果层次结构对您很重要,我建议只将父角色附加到名称中。 Phone-1-in-Car-7 表示 Phone-1 包含在 Car-7 中。然后,您可以按照父链接以编程方式和手动方式组装层次结构。
我认为 ConnectMessage 中的“Message”是多余的。只需将消息名称设为“Connect”或更好的“ConnectToThing”(无论 Thing 是什么,如果相关的话)。
我不会像您使用 Message2 那样将您的消息名称复合太多。使用最少量的信息对任何要阅读这些名称的人都有用。我认为对此缺乏回应可能是由于您问题的这一部分造成的。我发现它很困惑,因为缺少很多细节。
希望这对您有所帮助。
关于java - Akka 消息和参与者的命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24105299/
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=
我正在使用Ruby,我正在与一个网络端点通信,该端点在发送消息本身之前需要格式化“header”。header中的第一个字段必须是消息长度,它被定义为网络字节顺序中的2二进制字节消息长度。比如我的消息长度是1024。如何将1024表示为二进制双字节? 最佳答案 Ruby(以及Perl和Python等)中字节整理的标准工具是pack和unpack。ruby的packisinArray.您的长度应该是两个字节长,并且按网络字节顺序排列,这听起来像是n格式说明符的工作:n|Integer|16-bitunsigned,network(bi
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/