新在Symfoob娱乐下载ny 5.4:信使的改进
可配置的处理程序使用PHP属性
提供的
此前Mirsepassi
在# 43588。
PHP的属性是一个伟大的方式添加元数据的PHP代码。在Syob娱乐下载mfony我们添加的选项使用PHP属性来配置大多数事情。这就是为什么在Symfonyob娱乐下载 5.4我们允许对消息处理程序配置属性。
而不是实现MessageHandlerInterface
,您现在可以添加AsMessageHandler
任何PHP类属性和使用它作为一个消息处理程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src / MessageHandler / SmsNotificationHandler.php名称空间应用程序\MessageHandler;使用应用程序\消息\OtherSmsNotification;使用应用程序\消息\SmsNotification;使用ob娱乐下载\组件\信使\属性\AsMessageHandler;# (AsMessageHandler (fromTransport:“异步”,优先级:10))类SmsNotificationHandler{公共函数__invoke(SmsNotification美元消息){/ /……}}
工人的元数据
提供的
奥列格Krasavin
在# 42335。
目前没有简单的方法来得到工人的元数据,如交通的名字。在Syob娱乐下载mfony 5.4我们改善这个通过引入一个新的WorkerMetadata
类是通过$工人- > getWorkerMetadata ()
。例如,在一些听众/订阅者的方法处理ob娱乐下载Symfony信使事件你可以用这样的:
1 2 3 4 5 6 7 8 9
公共函数resetServices(WorkerRunningEvent美元事件):无效{美元actualTransportName=美元事件- >getWorker ()- >getWorkerMetadata ()- >getTransportName ();如果(!美元事件- >isWorkerIdle () | | ! in_array (美元actualTransportName,美元这- >receiversName,真正的)){返回;}美元这- >servicesResetter- >重置();}
重置容器服务之间的消息
提供的
格雷戈勒Pineau
在# 41163和# 43322。
容器服务不重置时自动处理消息。例如,这可能是一个问题独白祈祷处理程序。由于服务不重置,如果第一个消息触发了一个错误,下一个消息将日志和最终溢出缓冲区。
在Syob娱乐下载mfony 5.4我们改善这种情况选择自动重置服务在处理一条消息。要使用该功能,设置新的reset_on_message
选择真正的在你的信使配置:
1 2 3 4 5 6 7 8 9
#配置/包/ messenger.yaml框架:信使:reset_on_message:真正的传输:异步:dsn:' % env (MESSENGER_TRANSPORT_DSN) %失败:“教义:/ /违约? queue_name =失败'同步:“同步:/ /”
在批处理消息
提供的
尼古拉斯Grekas
在# 43354。
有时,当使用通讯组件,你可以一次处理多个消息而不是处理他们。Symob娱乐下载fony 5.4中我们引入了一个新的BatchHandlerInterface
让你在批处理程序来处理消息。
实现了这个接口的处理程序应该有一个新的ack美元
可选参数时提供__invoke ()
被称为。如果你不提供ack美元
论点,消息是同步处理的像往常一样。如果您提供ack美元
,__invoke()预计将缓冲区和它的消息ack美元
函数,返回在批处理中等待消息的数量。这里是一个批处理程序的样子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
类MyBatchHandler实现了BatchHandlerInterface{使用BatchHandlerTrait;公共函数__invoke(MyMessage美元消息,了望装置美元消= null){返回美元这- >处理(美元消息,美元消);}私人函数过程(数组美元工作):无效{foreach(美元工作作为(美元消息,美元消){试一试{/ / […)计算结果从美元的消息美元消- >(消美元结果);}抓(\ Throwable美元e){美元消- >纳(美元e);}}}}
的大小批量控制BatchHandlerTrait: shouldFlush ()
(默认为10
)。
Alexander Menshchikov is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now