mbassador

2025-12-11 0 868

mbassador

mbassador是实施发布订阅模式的轻巧,高性能事件总线。它旨在易于使用,并旨在具有丰富且可扩展的功能,同时保持资源效率和性能。

mbassador的核心是围绕一个自定义数据结构而建立的,该自定义数据结构提供了非阻滞读取和最小化锁定的争论,以使同时读取/写入访问的性能降低是最小的。说明该设计优势的基准可以在此GitHub存储库中获得。

该代码已经准备就绪:86%的指令覆盖范围,82%的分支机构覆盖范围,随机和同时运行的测试集,在过去的18个月中没有重大错误。如果不彻底测试代码,将不会对核心进行修改。

用法|功能|安装| Wiki |发行说明|集成|学分|贡献|执照

用法

在您的项目中使用mbassador非常容易。创建mbassador的尽可能多的实例(通常是单身人士会做的) bus = new mbassador () ,标记并使用@Handler注释配置您的消息处理程序,最后在任何mbassador INSPENS bus.subscribe(aListener)上注册听众。开始使用mbassador的出版物bus.post(message).now()bus.post(message).asynchronously()一种开始向听众发送消息。

作为第一个参考,请考虑此说明性示例。您可能想查看示例的集合,以更详细地查看其功能。

mbassador ();
bus.subscribe (new SimpleFileListener());
bus.post(new File("/tmp/smallfile.csv")).now();
bus.post(new File("/tmp/bigfile.csv")).asynchronously();
\”>

      
// Define your handlers

@ Listener ( references = References . Strong )
class SimpleFileListener {

    @ Handler
    public void handle ( File file ){
      // do something with the file
    }
    
    @ Handler ( delivery = Invoke . Asynchronously )
    public void expensiveOperation ( File file ){
      // do something with the file
    }
    
    @ Handler ( condition = \"msg.size >= 10000\" )
    @ Enveloped ( messages = { HashMap . class , LinkedList . class })
    public void handleLarge ( MessageEnvelope envelope ) {
       // handle objects without common super type
    }

}

// somewhere else in your code

mbassador bus = new mbassador ();
bus . subscribe ( new SimpleFileListener ());
bus . post ( new File ( \"/tmp/smallfile.csv\" )). now ();
bus . post ( new File ( \"/tmp/bigfile.csv\" )). asynchronously ();

特征

注释驱动

注解 功能
@Handler 将方法标记为消息处理程序
@Listener 可用于自定义侦听器宽配置,例如使用的参考类型
@Enveloped 消息信封可用于将不同类型的消息传递到单个处理程序中
@Filter 添加过滤以防止某些消息发布

提供所有内容,尊重类型层次结构

消息不需要实现任何接口,并且可以是任何类型的界面。在消息传递期间考虑了一条消息的类层次结构,因此处理程序还将接收其消耗的消息类型的子类型 – 例如,对象的处理程序。Class收到所有内容。与任何处理程序不匹配的消息会导致包装原始消息的DeadMessage对象的发布。可以通过注册处理DeadMessage的听众来处理DeadMessage事件。

同步和异步消息传递

使用mbassador时,有两种类型的(A-)同步性:消息派遣和处理程序调用。消息派遣

同步调度意味着发布方法块,直到所有处理程序都被处理为止。注意:这并不一定意味着每个处理程序都已被调用并收到了消息 – 由于可能将同步调度与异步处理程序相结合。这是publish(Object obj)post(Objec obj).now()

异步调度意味着发布方法会立即返回,并且该消息将在另一个线程中派发(Fire and Hospect)。这是publishAsync(Object obj)post(Objec obj).asynchronously()

处理程序调用

同步处理程序被顺序调用,并从运行出版物中的同一线程调用。异步处理程序意味着将实际的处理程序调用推到由工作线池处理的队列。

可配置的参考类型

默认情况下, mbassador使用弱参考来对听众使用弱参考,以使程序员明确订阅了不再使用的侦听器并避免记忆 – 透露率。在容器管理的环境中,这非常舒适,在这些环境中,通过框架,即春季,guice等创建和破坏听众。只需将所有内容添加到公共汽车中,它就会忽略没有处理程序的物体,并在垃圾收集器完成工作后自动清理孤儿弱参考。

可以使用@Listener(references=References.Strong)使用强引用来对侦听器进行配置,而不是使用弱参考。强烈引用的听众会坚持下去,直到明确取消订阅为止。

消息过滤

mbassador提供静态消息过滤。使用注释配置过滤器,可以将多个过滤器附加到单个消息处理程序上。由于@Handler中的1.2.0版Java EL表达式是定义条件消息调度的另一种方法。具有匹配处理程序但不传递配置过滤器的消息会导致包装原始消息的过滤对象出版。可以通过注册处理过滤的听众来处理过滤的事件。

注意:由于版本1.3.1可以将过滤器包裹在自定义注释中以进行重复使用

    public static final class RejectAllFilter implements IMessageFilter {

        @ Override
        public boolean accepts ( Object event ,  SubscriptionContext context ) {
            return false ;
        }
    }

    @ IncludeFilters ({ @ Filter ( RejectAllFilter . class )})
    @ Retention ( RetentionPolicy . RUNTIME )
    public @interface RejectAll {}
    
    public static class FilteredMessageListener {
    
        // will cause republication of a FilteredEvent
        @ Handler
        @ RejectAll
        public void handleNone ( Object any ){
            FilteredEventCounter . incrementAndGet ();
        }

        
    }

包裹的消息

消息处理人员可以声明使用Enveloped消息接收包裹的消息。信封可以包装不同类型的消息,以允许单个处理程序处理多种无关的消息类型。

处理程序的优先事项

处理程序可以与优先级相关联,以影响存在多个匹配处理程序时传递消息的顺序

自定义错误处理

消息传递期间的错误将发送到所有已注册的错误处理程序,可以根据需要将其添加到总线上。

可扩展性

mbassador设计为可扩展的,以自定义实现各种组件,例如消息调度程序和处理程序调用(使用装饰器模式),元数据读取器(您可以添加自己的注释)和工厂为各种对象。配置对象用于自定义不同的可配置零件,请参阅功能

安装

mbassador可从Maven Central存储库中使用以下坐标提供:

mbassador</artifactId>
<version>{see.git.tags.for.latest.version}</version>
</dependency>
\”>

< dependency >
    < groupId >net.engio</ groupId >
    < artifactId > mbassador </ artifactId >
    < version >{see.git.tags.for.latest.version}</ version >
</ dependency >

您还可以从Maven Central存储库下载二元版本和Javadoc。当然,您始终可以克隆存储库并从源构建。

文档

正在进行努力扩展文档并提供代码样本以及有关消息总线如何工作的详细说明。代码样本也可以在各种测试用例中找到。请阅读有关此项目中使用的术语,以避免混乱和误解。

  • Javadoc
  • Wiki
  • ProgramCreek上的API示例:处理程序,BusConfiguration, mbassador

集成

有一个弹簧延伸,可以支持在春季环境中发送类似CDI的交易消息。这是与其他框架集成的一个很好的例子。另一个例子是Guice集成。

学分

创建此组件的最初灵感来自Google Guava的活动总线实现。我喜欢其设计的简单性,并且相信Google库的代码质量。不幸的是,它仅使用强烈的参考。

感谢所有贡献者,尤其是

  • Arne-dandamme增加了对元通道的支持
  • Bernd Rosstauscher提供与Juel的初步集成
  • David Sowerby回答用户问题,他的Guice集成教程和他的各种PRS
  • Dorkbox用于各种PRS及其在性能调整方面的工作
  • Durron597为他的许多PRS以及他为其他用户提供的帮助

非常感谢EJ技术提供了Intellij Idea的许可的开源许可证和Jetbrains的开源许可证

mbassador使用的OSS:Junit | Maven | MOCKITO | slf4j |奥德修斯·乔尔(Odysseus Juel)

贡献

从开放问题列表中选择问题并开始实施。使您的PRS小并提供测试代码!以一个很好的例子来看一下这个问题。

注意:由于数据结构和同步代码的复杂性,要获得稳定的核心花了很长时间。仅当新功能不需要对核心进行重大修改时,才能实现。 mbassador的主要重点是提供高性能扩展的酒吧/子。

示例代码和文档都是非常感谢的贡献。特别是与不同框架的集成具有很大的价值。随意并欢迎创建Wiki页面以分享您的代码和想法。示例:Guice集成

执照

该项目根据MIT许可证的条款分发。有关进一步的参考,请参见文件“许可”。

下载源码

通过命令行克隆项目:

git clone https://github.com/bennidi/mbassador.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 编程相关 mbassador https://www.zuozi.net/34333.html

jellyfin
上一篇: jellyfin
openrndr
下一篇: openrndr
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务