package rabbitmq import ( "github.com/streadway/amqp" ) /** * 发送消息 * @param exchange 交换机名 * @param extype 消息类型 * @param route 路由key * @param body 内容 */ func Send(extype string, exchange string, route string, body []byte, extend ...bool) error { var durable, auto_delete, no_wait, internal bool = true, false, false, false if len(extend) > 0 { durable = extend[0] } if len(extend) > 1 { auto_delete = extend[1] } if len(extend) > 2 { no_wait = extend[2] } if len(extend) > 3 { internal = extend[3] } var err error err = Chan.ExchangeDeclare( exchange, // name extype, // type durable, // durable auto_delete, // auto-deleted internal, // internal no_wait, // no-wait nil, // arguments ) if err != nil { return err } err = Chan.Publish( exchange, // exchange route, // routing key false, // mandatory false, // immediate amqp.Publishing{ ContentType: "text/plain", Body: body, }) return err } /** * 发送消息 * @param exchange 交换机名 * @param extype 消息类型 * @param route 路由key * @param body 内容 * @param delay 延迟多少毫秒 */ func SendDelay(extype string, exchange string, route string, body []byte, delay int64, extend ...bool) error { var durable, auto_delete, no_wait, internal bool = true, false, false, false if len(extend) > 0 { durable = extend[0] } if len(extend) > 1 { auto_delete = extend[1] } if len(extend) > 2 { no_wait = extend[2] } if len(extend) > 3 { internal = extend[3] } var err error err = Chan.ExchangeDeclare( exchange, // name "x-delayed-message", // type durable, // durable auto_delete, // auto-deleted internal, // internal no_wait, // no-wait amqp.Table{"x-delayed-type": extype}, // arguments ) if err != nil { return err } err = Chan.Publish( exchange, // exchange route, // routing key false, // mandatory false, // immediate amqp.Publishing{ Headers: amqp.Table{"x-delay": delay}, ContentType: "text/plain", Body: body, }) return err }