Browse Source

Try add DispathLooseConnection v2

pull/127/head
WiRight 3 years ago
parent
commit
89c5b17a14
No known key found for this signature in database GPG Key ID: 427DBE0B77ED3FBD
3 changed files with 9 additions and 6 deletions
  1. +4
    -6
      connection.go
  2. +4
    -0
      internal/channelmanager/channel_manager.go
  3. +1
    -0
      internal/connectionmanager/connection_manager.go

+ 4
- 6
connection.go View File

@ -14,7 +14,7 @@ type Conn struct {
reconnectErrCh <-chan error reconnectErrCh <-chan error
closeConnectionToManagerCh chan<- struct{} closeConnectionToManagerCh chan<- struct{}
reconnectHooks []func()
reconnectHooks []func(error)
looseConnectionCh <-chan error looseConnectionCh <-chan error
mutex *sync.RWMutex mutex *sync.RWMutex
@ -59,13 +59,11 @@ func NewConn(url string, optionFuncs ...func(*ConnectionOptions)) (*Conn, error)
} }
func (conn *Conn) handleLooseConnection() { func (conn *Conn) handleLooseConnection() {
for {
<-conn.looseConnectionCh
for err := range conn.looseConnectionCh {
conn.mutex.Lock() conn.mutex.Lock()
for _, fhook := range conn.reconnectHooks { for _, fhook := range conn.reconnectHooks {
fhook()
fhook(err)
} }
conn.mutex.Unlock() conn.mutex.Unlock()
@ -78,7 +76,7 @@ func (conn *Conn) handleRestarts() {
} }
} }
func (conn *Conn) RegisterReconnectHook(hook func()) {
func (conn *Conn) RegisterReconnectHook(hook func(error)) {
conn.mutex.Lock() conn.mutex.Lock()
conn.reconnectHooks = append(conn.reconnectHooks, hook) conn.reconnectHooks = append(conn.reconnectHooks, hook)
conn.mutex.Unlock() conn.mutex.Unlock()


+ 4
- 0
internal/channelmanager/channel_manager.go View File

@ -40,7 +40,9 @@ func NewChannelManager(connManager *connectionmanager.ConnectionManager, log log
reconnectionCountMux: &sync.Mutex{}, reconnectionCountMux: &sync.Mutex{},
dispatcher: dispatcher.NewDispatcher(), dispatcher: dispatcher.NewDispatcher(),
} }
go chanManager.startNotifyCancelOrClosed() go chanManager.startNotifyCancelOrClosed()
return &chanManager, nil return &chanManager, nil
} }
@ -52,6 +54,7 @@ func getNewChannel(connManager *connectionmanager.ConnectionManager) (*amqp.Chan
if err != nil { if err != nil {
return nil, err return nil, err
} }
return ch, nil return ch, nil
} }
@ -71,6 +74,7 @@ func (chanManager *ChannelManager) startNotifyCancelOrClosed() {
chanManager.logger.Warnf("successfully reconnected to amqp server") chanManager.logger.Warnf("successfully reconnected to amqp server")
chanManager.dispatcher.Dispatch(err) chanManager.dispatcher.Dispatch(err)
} }
if err == nil { if err == nil {
chanManager.logger.Infof("amqp channel closed gracefully") chanManager.logger.Infof("amqp channel closed gracefully")
} }


+ 1
- 0
internal/connectionmanager/connection_manager.go View File

@ -88,6 +88,7 @@ func (connManager *ConnectionManager) startNotifyClose() {
connManager.reconnectLoop() connManager.reconnectLoop()
connManager.logger.Warnf("successfully reconnected to amqp server") connManager.logger.Warnf("successfully reconnected to amqp server")
connManager.dispatcher.Dispatch(err) connManager.dispatcher.Dispatch(err)
connManager.dispatcher.DispathLooseConnection(nil)
} }
if err == nil { if err == nil {


Loading…
Cancel
Save