示例#1
0
文件: consumer.go 项目: houcy/push
func NewConsumer(amqpURI, exchange string, qos int) (*Consumer, error) {
	queueName := utils.GetLocalIP()
	ctag := queueName + "_tag"
	c := &Consumer{
		conn:    nil,
		channel: nil,
		queue:   queueName,
		tag:     ctag,
		done:    make(chan error),
	}

	var err error

	log.Infof("dialing %q", amqpURI)
	c.conn, err = amqp.Dial(amqpURI)
	if err != nil {
		return nil, fmt.Errorf("Dial: %s", err)
	}

	/*go func() {
		log.Infof("closing: %s", <-c.conn.NotifyClose(make(chan *amqp.Error)))
	}()*/

	log.Infof("got Connection, getting Channel")
	c.channel, err = c.conn.Channel()
	if err != nil {
		return nil, fmt.Errorf("Channel: %s", err)
	}

	queue, err := c.channel.QueueDeclare(
		queueName, // name of the queue
		true,      // durable
		false,     // delete when usused
		false,     // exclusive
		false,     // noWait
		nil,       // arguments
	)
	if err != nil {
		return nil, fmt.Errorf("Queue Declare: %s", err)
	}

	log.Infof("declared Queue (%q %d messages, %d consumers), binding to Exchange (%s)",
		queue.Name, queue.Messages, queue.Consumers, exchange)

	if err = c.channel.QueueBind(
		queue.Name, // name of the queue
		"",         // bindingKey
		exchange,   // sourceExchange
		false,      // noWait
		nil,        // arguments
	); err != nil {
		return nil, fmt.Errorf("Queue Bind: %s", err)
	}

	c.channel.Qos(qos, 0, false)
	return c, nil
}
示例#2
0
文件: server.go 项目: houcy/push
func NewServer(ato uint32, rto uint32, wto uint32, hto uint32, maxBodyLen uint32, maxClients uint32, srcnt int) *Server {
	return &Server{
		Name:          utils.GetLocalIP(),
		ctrl:          make(chan bool),
		lock:          new(sync.Mutex),
		wg:            &sync.WaitGroup{},
		funcMap:       make(map[uint8]MsgHandler),
		acceptTimeout: time.Duration(ato),
		readTimeout:   time.Duration(rto),
		writeTimeout:  time.Duration(wto),
		hbTimeout:     time.Duration(hto),
		maxBodyLen:    maxBodyLen,
		maxClients:    maxClients,
		clientCount:   0,
		workerCount:   srcnt,
		workers:       make(map[int]*Worker),
		HbInterval:    DEFAULT_HB_INTERVAL,
		ReconnTime:    DEFAULT_RECONN_TIME,
	}
}
示例#3
0
文件: zk.go 项目: houcy/push
func InitZk(config *conf.ConfigStruct) error {
	conn, err := Connect(config.ZooKeeper.Addr, config.ZooKeeper.Timeout*time.Second)
	if err != nil {
		return err
	}
	_, err = conn.Create(config.ZooKeeper.Path, []byte(""), 0, zk.WorldACL(zk.PermAll))
	if err != nil && err != zk.ErrNodeExists {
		return err
	}
	ip := utils.GetLocalIP()
	port := config.Comet.Port
	addr := ip + ":" + port
	if port == "20000" {
		addr = ip
	}
	data, _ := json.Marshal(addr)
	err = Register(conn, config.ZooKeeper.Path, data)
	if err != nil {
		return err
	}
	return nil
}