예제 #1
0
파일: backend.go 프로젝트: MogeiWang/dingo
func NewBackend(cfg *AmqpConfig) (v *backend, err error) {
	if cfg == nil {
		cfg = DefaultAmqpConfig()
	}
	v = &backend{
		reporters: dingo.NewHetroRoutines(),
		rids:      make(map[string]map[string]int),
		cfg:       *cfg,
		stores:    dingo.NewHetroRoutines(),
	}

	v.sender, err = newConnection(&v.cfg)
	if err != nil {
		return
	}

	v.receiver, err = newConnection(&v.cfg)
	if err != nil {
		return
	}

	// define exchange
	ci, err := v.sender.Channel()
	if err != nil {
		return
	}
	defer func() {
		if err != nil {
			v.sender.ReleaseChannel(nil)
		} else {
			v.sender.ReleaseChannel(ci)
		}
	}()

	// init exchange
	err = ci.Channel.ExchangeDeclare(
		"dingo.x.result", // name of exchange
		"direct",         // kind
		true,             // durable
		false,            // auto-delete
		false,            // internal
		false,            // noWait
		nil,              // args
	)
	if err != nil {
		return
	}

	return
}
예제 #2
0
파일: backend.go 프로젝트: MogeiWang/dingo
func NewBackend(cfg *RedisConfig) (v *backend, err error) {
	if cfg == nil {
		cfg = DefaultRedisConfig()
	}
	v = &backend{
		reporters: dingo.NewHetroRoutines(),
		rids:      make(map[string]map[string]int),
		stores:    dingo.NewHetroRoutines(),
		cfg:       *cfg,
	}
	v.pool, err = newRedisPool(&v.cfg)
	if err != nil {
		return
	}

	return
}