JavaLib | 消息引擎的妙用

简介:

JavaLib开始支持消息引擎啦。这里我们以支付方式的选择来进行演示。

闲话少说,直接进入今天的主题。

项目搭建

1、你需要用Spring Boot搭建一个项目

2、引入 JavaLib

<dependencies>
    ...
    <dependency>
        <groupId>com.github.fengwenyi</groupId>
        <artifactId>JavaLib</artifactId>
        <version>1.0.4.RELEASE</version>
    </dependency>
    ...
</dependencies>

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

写代码

1、编写Handler。需要实现 Handler 接口中的 execute方法。

这里有两个,AliPayHandler, VXPayHandler。我们看一下 AliPayHandler

import com.fengwenyi.javalib.handler.Handler;
import com.fengwenyi.javalib.messageengine.CommonMessage;
import com.fengwenyi.messageengine.MEConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 支付宝支付Handler
 *
 * @author Wenyi Feng
 * @since 2018-09-06
 */
@Component
@Slf4j
public class AliPayHandler implements Handler {
    @Override
    public void execute(CommonMessage message) throws Exception {
        log.info("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");

        log.info("支付方式:{}", "支付宝");
        log.info("姓名:{}", message.getHeader(MEConstant.NAME));
        log.info("账号:{}", MEConstant.ACCOUNT);

        log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
    }
}

2、编写Bean。

import com.fengwenyi.javalib.handler.HandlerRegister;
import com.fengwenyi.messageengine.handler.AliPayHandler;
import com.fengwenyi.messageengine.handler.VXPayHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * Bean配置
 *
 * @author Wenyi Feng
 * @since 2018-09-06
 */
@Configuration
public class BeanConfig {

    @Autowired
    private AliPayHandler aliPayHandler;

    @Autowired
    private VXPayHandler vxPayHandler;

    @Bean
    public HandlerRegister messageEngineBean() {

        HandlerRegister handlerRegister = new HandlerRegister();

        handlerRegister.setHandler("ali", aliPayHandler);
        handlerRegister.setHandler("vx", vxPayHandler);

        return handlerRegister;
    }

}

3、写测试代码

import com.fengwenyi.javalib.handler.Handler;
import com.fengwenyi.javalib.handler.HandlerRegister;
import com.fengwenyi.javalib.messageengine.CommonMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class MessageEngineApplication {

    public static void main(String[] args) {
        SpringApplication.run(MessageEngineApplication.class, args);
    }

    @Autowired
    private HandlerRegister handlerRegister;

    @RequestMapping("/pay")
    public void pay(String type, String name, String account) {

        CommonMessage cm = new CommonMessage();
        cm.setHeader(MEConstant.NAME, name);
        cm.setHeader(MEConstant.ACCOUNT, account);

        Handler handler = handlerRegister.getHandler(type);
        try {
            handler.execute(cm);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

测试

请求URL

http://localhost:8080/pay?type=ali&name=张三&account=ali_zhangsan

打印日志(截图)

支付宝支付信息

请求URL

http://localhost:8080/pay?type=vx&name=张三&account=vx_zhangsan

打印日志(截图)

微信支付信息

资料

[1] 感谢 @毛什么文 叫我写 Bean

[2] 本节测试代码:message-engine

目录
相关文章
|
消息中间件 NoSQL 关系型数据库
6年高级开发就因这道题少了5K,Kafka如何避免消息重复消费?
一个6年工作经验的小伙伴,被问到这样一个问题,说Kafka是如何避免消息重复消费的?面试完之后,这位小伙伴来找到我,希望我能给一个思路。今天,我给大家分享一下我的思路。
166 1
|
4月前
|
消息中间件 Java Kafka
Kafka不重复消费的终极秘籍!解锁幂等性、偏移量、去重神器,让你的数据流稳如老狗,告别数据混乱时代!
【8月更文挑战第24天】Apache Kafka作为一款领先的分布式流处理平台,凭借其卓越的高吞吐量与低延迟特性,在大数据处理领域中占据重要地位。然而,在利用Kafka进行数据处理时,如何有效避免重复消费成为众多开发者关注的焦点。本文深入探讨了Kafka中可能出现重复消费的原因,并提出了四种实用的解决方案:利用消息偏移量手动控制消费进度;启用幂等性生产者确保消息不被重复发送;在消费者端实施去重机制;以及借助Kafka的事务支持实现精确的一次性处理。通过这些方法,开发者可根据不同的应用场景灵活选择最适合的策略,从而保障数据处理的准确性和一致性。
356 9
|
4月前
|
监控 Java API
【揭秘】如何用Flink CEP揪出那些偷偷摸摸连续登录失败的“捣蛋鬼”?——一场数据流中的侦探游戏
【8月更文挑战第26天】Flink 是一款先进的流处理框架,提供复杂事件处理(CEP)功能以识别实时数据流中的特定模式。CEP 在 Flink 中通过 `CEP` API 实现,支持基于模式匹配的事件检测。本文通过监测用户连续三次登录失败的具体案例介绍 Flink CEP 的工作原理与应用方法。首先创建 Flink 环境并定义数据源,接着利用 CEP 定义连续三次失败登录的模式,最后处理匹配结果并输出警报。Flink CEP 能够轻松扩展至更复杂的场景,如异常行为检测和交易欺诈检测等,有效应对多样化的业务需求。
57 0
|
7月前
|
JavaScript 前端开发 Java
流的概念,怎么处理
流的概念,怎么处理
|
设计模式 Go
Go语言事件系统设计解析:发布-订阅模式实战
Go语言事件系统设计解析:发布-订阅模式实战
493 0
|
7月前
|
存储 SQL 安全
探秘MSSQL存储过程:存储过程的高级特性和实战技巧
探秘MSSQL存储过程:存储过程的高级特性和实战技巧
|
消息中间件 缓存 供应链
“消息驱动、事件驱动、流 ”基础概念解析
本文旨在帮助大家对近期消息领域的高频词“消息驱动(Message-Driven),事件驱动(Event-Driven)和流(Streaming)”有更清晰的了解和认知,其中事件驱动 EDA 作为 Gartner 预测的十大技术趋势之一, EventBridge 作为下一代消息中间件,也是目前的重点方向之一。
331 0
“消息驱动、事件驱动、流 ”基础概念解析
|
自然语言处理 PyTorch 算法框架/工具
离线解耦的文本表征方法(持续更新ing...)
本文仅介绍离线、解耦的、直接对文本进行表征的方法。分成通过词嵌入池化得到句子嵌入,和直接进行句子嵌入两种做法。主要用PyTorch实现。 本文将使用一个数据集来撰写相应代码,并使用简单的线性分类器来实现multi-class文本分类,分类模型的代码(我每个都是跟前面的文本表征部分直接写在同一个脚本里的)和各表征方法的效果在第4节展示。 本文使用的分词方式是jieba默认模式。其他注意事项看具体各分节内容。
离线解耦的文本表征方法(持续更新ing...)
|
Arthas 缓存 算法
如何写出高性能代码(二)巧用数据特性
同一份逻辑,不同人的实现的代码性能会出现数量级的差异; 同一份代码,你可能微调几个字符或者某行代码的顺序,就会有数倍的性能提升;同一份代码,也可能在不同处理器上运行也会有几倍的性能差异;十倍程序员 不是只存在于传说中,可能在我们的周围也比比皆是。十倍体现在程序员的方法面面,而代码性能却是其中最直观的一面。
191 0
如何写出高性能代码(二)巧用数据特性
|
消息中间件 RocketMQ 开发者
顺序消息分析|学习笔记
快速学习顺序消息分析
顺序消息分析|学习笔记