|
|
|
@ -8,10 +8,43 @@ import ( |
|
|
|
func (connManager *ConnectionManager) NotifyBlockedSafe( |
|
|
|
receiver chan amqp.Blocking, |
|
|
|
) chan amqp.Blocking { |
|
|
|
connManager.connectionMu.RLock() |
|
|
|
defer connManager.connectionMu.RUnlock() |
|
|
|
connManager.connectionMu.Lock() |
|
|
|
defer connManager.connectionMu.Unlock() |
|
|
|
|
|
|
|
return connManager.connection.NotifyBlocked( |
|
|
|
receiver, |
|
|
|
) |
|
|
|
// add receiver to connection manager.
|
|
|
|
connManager.publisherNotifyBlockingReceiversMu.Lock() |
|
|
|
connManager.publisherNotifyBlockingReceivers = append(connManager.publisherNotifyBlockingReceivers, receiver) |
|
|
|
connManager.publisherNotifyBlockingReceiversMu.Unlock() |
|
|
|
|
|
|
|
if !connManager.universalNotifyBlockingReceiverUsed { |
|
|
|
connManager.connection.NotifyBlocked( |
|
|
|
connManager.universalNotifyBlockingReceiver, |
|
|
|
) |
|
|
|
connManager.universalNotifyBlockingReceiverUsed = true |
|
|
|
} |
|
|
|
|
|
|
|
return receiver |
|
|
|
} |
|
|
|
|
|
|
|
// readUniversalBlockReceiver reads on universal blocking receiver and broadcasts event to all blocking receivers of
|
|
|
|
// connection manager.
|
|
|
|
func (connManager *ConnectionManager) readUniversalBlockReceiver() { |
|
|
|
for b := range connManager.universalNotifyBlockingReceiver { |
|
|
|
connManager.publisherNotifyBlockingReceiversMu.RLock() |
|
|
|
for _, br := range connManager.publisherNotifyBlockingReceivers { |
|
|
|
br <- b |
|
|
|
} |
|
|
|
connManager.publisherNotifyBlockingReceiversMu.RUnlock() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func (connManager *ConnectionManager) RemovePublisherBlockingReceiver(receiver chan amqp.Blocking) { |
|
|
|
connManager.publisherNotifyBlockingReceiversMu.Lock() |
|
|
|
for i, br := range connManager.publisherNotifyBlockingReceivers { |
|
|
|
if br == receiver { |
|
|
|
connManager.publisherNotifyBlockingReceivers = append(connManager.publisherNotifyBlockingReceivers[:i], connManager.publisherNotifyBlockingReceivers[i+1:]...) |
|
|
|
} |
|
|
|
} |
|
|
|
connManager.publisherNotifyBlockingReceiversMu.Unlock() |
|
|
|
close(receiver) |
|
|
|
} |