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
closeConnectionToManagerCh chan<- struct{}
reconnectHooks []func()
reconnectHooks []func(error)
looseConnectionCh <-chan error
mutex *sync.RWMutex
@ -59,13 +59,11 @@ func NewConn(url string, optionFuncs ...func(*ConnectionOptions)) (*Conn, error)
}
func (conn *Conn) handleLooseConnection() {
for {
<-conn.looseConnectionCh
for err := range conn.looseConnectionCh {
conn.mutex.Lock()
for _, fhook := range conn.reconnectHooks {
fhook()
fhook(err)
}
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.reconnectHooks = append(conn.reconnectHooks, hook)
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{},
dispatcher: dispatcher.NewDispatcher(),
}
go chanManager.startNotifyCancelOrClosed()
return &chanManager, nil
}
@ -52,6 +54,7 @@ func getNewChannel(connManager *connectionmanager.ConnectionManager) (*amqp.Chan
if err != nil {
return nil, err
}
return ch, nil
}
@ -71,6 +74,7 @@ func (chanManager *ChannelManager) startNotifyCancelOrClosed() {
chanManager.logger.Warnf("successfully reconnected to amqp server")
chanManager.dispatcher.Dispatch(err)
}
if err == nil {
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.logger.Warnf("successfully reconnected to amqp server")
connManager.dispatcher.Dispatch(err)
connManager.dispatcher.DispathLooseConnection(nil)
}
if err == nil {


Loading…
Cancel
Save