Skip to content

Commit 2b91211

Browse files
author
Guy Baron
authored
cunsume the messages channel via ranging over the channel to prevent (#125)
empty delivreies
1 parent d5d04b9 commit 2b91211

File tree

2 files changed

+16
-45
lines changed

2 files changed

+16
-45
lines changed

gbus/bus.go

+4-12
Original file line numberDiff line numberDiff line change
@@ -168,14 +168,6 @@ func (b *DefaultBus) bindServiceQueue() error {
168168
return nil
169169
}
170170

171-
func (b *DefaultBus) createAMQPChannel(conn *amqp.Connection) (*amqp.Channel, error) {
172-
channel, e := conn.Channel()
173-
if e != nil {
174-
return nil, e
175-
}
176-
return channel, nil
177-
}
178-
179171
//Start implements GBus.Start()
180172
func (b *DefaultBus) Start() error {
181173

@@ -188,10 +180,10 @@ func (b *DefaultBus) Start() error {
188180
return e
189181
}
190182

191-
if b.ingressChannel, e = b.createAMQPChannel(b.ingressConn); e != nil {
183+
if b.ingressChannel, e = b.ingressConn.Channel(); e != nil {
192184
return e
193185
}
194-
if b.egressChannel, e = b.createAMQPChannel(b.egressConn); e != nil {
186+
if b.egressChannel, e = b.egressConn.Channel(); e != nil {
195187
return e
196188
}
197189

@@ -209,7 +201,7 @@ func (b *DefaultBus) Start() error {
209201
TODO://the design is crap and needs to be refactored
210202
*/
211203
var amqpChan *amqp.Channel
212-
if amqpChan, e = b.createAMQPChannel(b.egressConn); e != nil {
204+
if amqpChan, e = b.egressConn.Channel(); e != nil {
213205
b.Log().WithError(e).Error("failed to create amqp channel for transactional outbox")
214206
return e
215207
}
@@ -272,7 +264,7 @@ func (b *DefaultBus) createBusWorkers(workerNum uint) ([]*worker, error) {
272264
workers := make([]*worker, 0)
273265
for i := uint(0); i < workerNum; i++ {
274266
//create a channel per worker as we can't share channels across go routines
275-
amqpChan, createChanErr := b.createAMQPChannel(b.ingressConn)
267+
amqpChan, createChanErr := b.ingressConn.Channel()
276268
if createChanErr != nil {
277269
return nil, createChanErr
278270
}

gbus/worker.go

+12-33
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func (worker *worker) Start() error {
6666
worker.rpcMessages = rpcmsgs
6767

6868
go worker.consumeMessages()
69-
69+
go worker.consumeRPC()
7070
return nil
7171
}
7272

@@ -93,43 +93,22 @@ func (worker *worker) createMessagesChannel(q amqp.Queue, consumerTag string) (<
9393

9494
func (worker *worker) consumeMessages() {
9595

96-
//TODO:Handle panics due to tx errors so the consumption of messages will continue
97-
for {
98-
99-
var isRPCreply bool
100-
var delivery amqp.Delivery
101-
var shouldProceed bool
102-
103-
select {
104-
105-
case <-worker.stop:
106-
worker.log().Info("stopped consuming messages")
107-
return
108-
case msgDelivery, ok := <-worker.messages:
109-
if ok {
110-
shouldProceed = true
111-
}
112-
delivery = msgDelivery
113-
isRPCreply = false
114-
case rpcDelivery, ok := <-worker.rpcMessages:
115-
if ok {
116-
shouldProceed = true
117-
}
118-
delivery = rpcDelivery
119-
isRPCreply = true
96+
for msg := range worker.messages {
97+
if msg.Body == nil || len(msg.Body) == 0 {
98+
continue
12099
}
100+
worker.processMessage(msg, false)
101+
}
102+
}
121103

122-
/*
123-
as the bus shuts down and amqp connection is killed the messages channel (b.msgs) gets closed
124-
and delivery is a zero value so in order not to panic down the road we return if bus is shutdown
125-
*/
126-
if shouldProceed {
104+
func (worker *worker) consumeRPC() {
127105

128-
worker.processMessage(delivery, isRPCreply)
106+
for msg := range worker.rpcMessages {
107+
if msg.Body == nil || len(msg.Body) == 0 {
108+
continue
129109
}
130-
110+
worker.processMessage(msg, true)
131111
}
132-
133112
}
134113

135114
func (worker *worker) extractBusMessage(delivery amqp.Delivery) (*BusMessage, error) {

0 commit comments

Comments
 (0)