消息回调与根据企微消息使用回调函数处理添加联系人和添加部门事件

文章目录回调函数剖析回调函数的结构监听企微消息处理添加外部联系人/添加部门的业务接收Kafka监听到的企微消息并选择相应的处理接收企微消息的实体消息解析添加外部联系人抽象回调函数企微添加联系人实体企微添加部门实体回调函数要搞懂什么是回调函数,怎么使用回调函数回调函数其实也是函数(方法),就像白马王子也是王子一样。在本质上回调函数和普通的函数没有区别,同样可以被其他方法调用,也可以含有参数,可以拥有返回值。最大的不同是:回调函数并不能主动的触发的,而是根据调用者来判断我是否调用,调用哪一个方法。或者
摘要由CSDN通过智能技术生成

回调函数

要搞懂什么是回调函数,怎么使用回调函数

回调函数其实也是函数(方法),就像白马王子也是王子一样。在本质上回调函数和普通的函数没有区别,同样可以被其他方法调用,也可以含有参数,可以拥有返回值。最大的不同是:回调函数并不能主动的触发的,而是根据调用者来判断我是否调用,调用哪一个方法。

或者说他们调用的时机是不同的,普通的方法是可以随时调用的。
而回调函数相比普通方法更注重时机,举个栗子,有一碗饭,你不能确定它是中午饭还是下午饭,只有你吃了的时候才能确定它是什么时候的饭。

相对于回调函数,回调函数会根据调用者传递的不同参数来确定自己要调用的方法到底是哪个。(相比普通方法,回调函数更加的灵活)。

  • 普通方法使用重载的方式来拓宽灵活性,但是当我们需要执行时,需要根据不同的参数来匹配执行哪一个方法
  • 回调函数调用的方法是根据调用者的条件来确定实际调用的方法,也就是说回调函数本身可能有一定的抽象性。

剖析回调函数的结构

关于回调函数由两个实体对象:

  • 抽象回调接口:用于定义回调方法的抽象实现
  • 回调者:调用回调函数的实体
package MessageDemo;

/**
 * 抽象回调接口
 */
public interface ICallBack {
   
    /**
     * 抽象回调方法
     */
    public void  callback();
}
package MessageDemo;

public class Caller {
   
    public void call(ICallBack iCallBack){
   
        System.out.println("start");
        iCallBack.callback();
        System.out.println("end");
    }

    public static void main(String[] args) {
   
        Caller caller = new Caller();
        caller.call(new ICallBack() {
   
            @Override
            public void callback() {
   
                System.out.println("测试回调函数");
            }
        });
    }
}

start

测试回调函数

end

其实回调接口并不陌生,你在日常的编码中可能无形的使用过回调函数。

Thread mythread = new Thread(new Runnable() {
   
    @Override
    public void run() {
   
        System.out.println("这也是一个回调函数");
    }
});
mythread.start();

监听企微消息处理添加外部联系人/添加部门的业务

写一个稍复杂一点的Demo吧(类似于根据Kafka不同的消息类型来触发不同的回调函数)

适用场景:监听Kafka队列中的企微中的消息来处理不同的业务(列举两个业务:添加外部联系人/添加企微部门列表)

先说一下整体的结构:

  1. 需要根据监听到的企微消息来触发不同的业务
  2. 通过消息触发的
  3. 两个不同的业务
  4. 根据企微的接口文档说明匹配不同消息(注本次处理的企微消息都是文本消息)

接收Kafka监听到的企微消息并选择相应的处理

@Component
public class WorkWeixinMessageListener {
   
    @Component
public class WorkWeixinMessageListener {
   
	private final static Logger logger = LoggerFactory.getLogger(AddCustomerEvent.class);

	@Autowired
	WorkWeixinMessageConverter converter;
	@Autowired
	private Set<WorkWeixinMessageHandler> handlers;

	@Value("${weixin.qy.customer.change.url}")
	private String url;
	@Value("${weixin.qy.customer.change.apiKey}")
	private String apiKey;
	@Value("${weixin.qy.customer.change.apiSecret}")
	private String apiSecret;
	@Value("${weixin.qy.customer.change.timestamp:-1}")
	private Long timestamp;
	@Value("${workweixin.agent.microGuider.agentId}")
	private String agentId;
	@Value("${weixin.qy.group}")
	private String group;
    
	@PostConstruct
	public void initConsumer() {
   
		logger.info("init handlers: {}", JSON
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炒冷饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值