【笔记网站 源码】【javascript源码学习】【janus源码分析】SMS接收源码_短信接码源码

时间:2024-12-29 09:43:24 编辑:排查源码 来源:小程序优惠 源码

1.说下你可能没用过的收源EventBus
2.Action<SmsData> addData = d => SmsService.AddData(d); 如何理解?
3.开源数据质量解决方案 Apache Griffin - 安装篇

SMS接收源码_短信接码源码

说下你可能没用过的EventBus

       最近在Code Review过程中,我发现了一个业务场景:业务处理完成后,码短码源码需要通知审核人员,信接通知方式包括短信和邮件。收源代码如下:

       这个方法对吗?

       针对这种常见的码短码源码业务场景,我们首先会考虑同步或异步发送的信接笔记网站 源码问题。

       如果选择同步,收源会对接口的码短码源码响应时间产生影响,并且与业务逻辑紧密耦合,信接这显然不是收源好的做法。

       一般情况下,码短码源码我们会选择异步方式,信接使用消息队列(MQ)进行消息的收源发送和消费,或者使用线程池来处理,码短码源码这样不会影响主业务逻辑,信接可以提高性能,并且实现了解耦。

       此外,我们还需要考虑数据一致性的问题,邮件是否一定要发送成功?

       大多数情况下,我们并不要求邮件必须%发送成功,javascript源码学习失败了就失败了,只要监控告警的失败率不超过阈值即可。同时,消息服务一旦收到请求,应该自行保证消息的投递。

       因此,总的来说,使用MQ发送消息并自行处理,或者使用线程池进行异步处理,最后自行处理补偿逻辑,就能解决这类问题。

       那么,今天要介绍的是这两种解决方案之外的处理方式。对于这种场景,我们可以使用EventBus来解决。

       EventBus是事件总线的意思,它是Google Guava库的一个工具,基于观察者模式,可以在进程内实现代码的解耦。

       以上面的janus源码分析例子来说,引入MQ可能会有些过于复杂,其实使用EventBus也能达到相同的效果。与MQ相比,EventBus只能提供进程内的消息事件传递,但对于我们的业务场景来说,这已经足够了。

       接下来,我们来看一下EventBus的使用方法。首先,创建一个EventBus实例。

       第二步,创建一个事件消息订阅者,处理方式非常简单,只需在希望处理事件的方法上添加@Subscribe注解即可。

       形参只能有一个,如果定义0个或多个,运行时将会报错。

       第三步,注册事件。

       第四步,清源码头发送事件。

       这就是EventBus使用的最简单例子。下面我们看看如何结合开头的例子进行处理。

       比如上面提到的案例,比如注册和用户下单的场景,都需要发送消息和邮件给用户。

       EventBus并不强制要求我们使用单例模式,因为其创建和销毁成本较低,所以更多是根据我们的业务场景和上下文来选择。

       在业务逻辑处理完成后,分别注册了邮件和短信两个事件订阅者。

       最后,我们发送事件,用户注册时发送一个用户ID,下单成功时发送一个订单ID。

       然后写一个测试类进行测试,分别创建两个service,然后分别调用方法。

       执行测试类,我们可以看到输出,源码合作购买分别执行了事件订阅的方法。

       使用起来你会发现非常简单,对于希望轻量级简单地实现解耦,使用EventBus非常合适。

       注意,例子中的参数都是Long类型。如果事件的参数是其他类型,那么消息是无法接收到的。比如,如果我们将下单中发送的订单ID改为String类型,会发现没有消费。因为我们没有定义一个参数类型为String的方法。

       去EmailMsgHandler和SmsMsgHandler都新增一个接收String类型的订阅方法,这样就可以接收到了。

       除此之外,我们还可以定义一个DeadEvent来处理这种情况,它相当于是一个默认的处理方式。当没有匹配的事件类型参数时,就会默认发送一个DeadEvent事件。

       定义一个默认处理器。

       给BookingService新增一个pay()支付方法,下单完成后去支付,注册我们的默认事件。

       执行测试bookingService.pay(),看到输出结果:

       OK,简单的介绍就到这里。到目前为止,我们所说的都是同步调用,这并不符合我们的要求。我们当然希望使用异步处理更好。

       那就看看源码它是如何实现的。

       identifier是一个名字,标记,默认是default。

       executor是执行器,默认创建一个MoreExecutors.directExecutor(),事件订阅者根据你提供的executor来决定如何执行事件订阅的处理方式。

       exceptionHandler是异常处理器,默认创建的就是打点日志。

       subscribers是我们的消费者,订阅者。

       dispatcher用来做事件分发。

       默认创建的executor是一个MoreExecutors.directExecutor(),看到command.run()你就会发现这其实是同步执行。

       同步执行并不太好。我们希望不仅解耦,还要异步执行。EventBus提供了AsyncEventBus,我们可以自己传入executor。

       上面的代码我们改成异步的,这样不就好起来了嘛。实际上,我们可以结合自己的线程池来处理。

       OK,这个说清楚了。我们可以顺便再看看事件分发的处理。看到DeadEvent了吗?没有当前事件的订阅者,就会发送一个DeadEvent事件,bingo!

       OK,这个使用和源码都比较简单,有兴趣的同学可以自己去看看,花不了多少功夫。

       总的来说,EventBus提供了一个更优雅的代码解耦方式,你在实际工作中的业务中肯定能用得上它!

Action<SmsData> addData = d => SmsService.AddData(d); 如何理解?

       å…ˆæ‹†è§£å¦‚下:

       d => SmsService.AddData(d); //转换下

       public void temp(SmsData d)

       {

        SmsService.AddData(d);

       }

       ä¸è€ƒè™‘线程安全,再次翻译:

        Action<SmsData> addData = temp;

        addData(obj);

       public void temp(SmsData d)

       {

        SmsService.AddData(d);

       }

       çœç•¥äº†ä¸€ä¸ªå‡½æ•°ï¼Œç”¨Lamada表达式写的 这种写法很长见 后面你在编程的时候能看到不少

       è¿™ä¸ªæ˜¯ä¸€ä¸ªå§”托,在使用 Action<T> 委托时,不必显式定义一个封装只有一个参数的方法的委托。

       å®šä¹‰ï¼š

       public delegate void Action<in T>(T obj)//理解成泛型的。

       DEMO:

       using System;

       using System.Windows.Forms;

       public class TestAction1

       {

        public static void Main()

        {

        Action<string> messageTarget;

        if (Environment.GetCommandLineArgs().Length > 1)

        messageTarget = ShowWindowsMessage;

        else

        messageTarget = Console.WriteLine;

        messageTarget("Hello, World!");

        }

        private static void ShowWindowsMessage(string message)

        {

        MessageBox.Show(message);

        }

       }

开源数据质量解决方案 Apache Griffin - 安装篇

       本文将详细介绍如何安装开源数据质量解决方案Apache Griffin。首先,我们需要从GitHub获取源码,推荐使用分支griffin-0.2.0-incubating-rc4或tag=griffin-0.2.0-incubating。

       安装前,请访问官方文档进行参考。尽管官方文档不够详细,且部分内容可能与实际代码不一致,但在安装前阅读代码将有助于理解安装过程。

       安装流程如下:

       安装代码模块前,确保已按照代码提示修改`env.json`文件。特别注意,将`mail`和`sms`配置从数组改为单个对象,尽管这两个配置在当前版本中未使用,可能为未来添加报警功能预留。

       打包并编译成jar文件,命令如下:`mvn clean package`。确保在项目根目录执行此命令。

       上传编译后的jar文件到HDFS。

       服务端配置与启动

       安装并配置数据库服务。对于PostgreSQL和MySQL,分别执行`init_quartz.sql`文件以初始化quartz表。

       调整配置文件,包括`sparkJob.properties`、`application.properties`等。具体配置如下:

       - `sparkJob.properties`中可能包括一些特定于Apache Griffin的配置项。

       - `application.properties`中需要配置Hive元数据服务的地址,格式为`hive.metastore.uris = thrift://你的MetaStore地址:`。

       启动服务,执行命令`java -jar service/target/service.jar`。

       前端UI配置与启动

       运行`npm run start`以启动前端UI。

       为了部署生产环境,运行`npm run build`以生成静态文件。将`dist`目录下的静态文件复制到Nginx或其他服务器上。

       部署测试

       最后,访问部署的UI地址。页面成功打开后,配置测量和作业。如果系统运行正常,表示部署成功。

       请确保在部署前阅读官方文档并参考代码以确保正确的安装和配置。安装过程可能需要根据实际环境进行调整。祝您安装成功!