系统中主动和被动调用

23 阅读1分钟

1. 被动调用

顾名思义,等待其他模块调用,比如作为一个接口被其他http 服务调用

2. 主动执行|调用

1. 有个cronjob 定期触发

2. 服务刚启动的时候,有个异步协程调用,这个有时候很容器忽略

3. 实例

cronjob + go 协程, 主动调用 查询db/事务钩子自动触发,发送消息到event_bus 的topic

func NewOutboxManager(
	eventUsecase *event.EventUsecase, eventBus event.EventBus, waitingQueue *event.OutboxMessageLocalPendingQueue,
	logger log.Logger, conf *OutboxManagerConfig, txMgr tx.TransactionManager, cronUsecase *cron.CronJobUsecase,
) (*OutboxManager, error) {
	if err := conf.Vaildate(); err != nil {
		return nil, err
	}

	m := &OutboxManager{
		conf:         conf,
		pendingQueue: waitingQueue,
		eventUsecase: eventUsecase,
		eventBus:     eventBus,
		cronUsecase:  cronUsecase,
		txMgr:        txMgr,
		log:          log.NewHelper(log.With(logger, "module", "OutboxManager")),
	}

	if err := m.registerCronJobs(conf); err != nil {
		return nil, err
	}

	// TODO: 优雅退出
	go m.runLoop(context.Background())

	return m, nil
}