You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							55 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							55 lines
						
					
					
						
							1.5 KiB
						
					
					
				| package agent | |
| 
 | |
| import ( | |
| 	"github.com/seaweedfs/seaweedfs/weed/mq/client/pub_client" | |
| 	"github.com/seaweedfs/seaweedfs/weed/mq/client/sub_client" | |
| 	"github.com/seaweedfs/seaweedfs/weed/pb" | |
| 	"github.com/seaweedfs/seaweedfs/weed/pb/mq_agent_pb" | |
| 	"google.golang.org/grpc" | |
| 	"sync" | |
| ) | |
| 
 | |
| type SessionId int64 | |
| type SessionEntry[T any] struct { | |
| 	entry T | |
| } | |
| 
 | |
| type MessageQueueAgentOptions struct { | |
| 	SeedBrokers []pb.ServerAddress | |
| } | |
| 
 | |
| type MessageQueueAgent struct { | |
| 	mq_agent_pb.UnimplementedSeaweedMessagingAgentServer | |
| 	option          *MessageQueueAgentOptions | |
| 	brokers         []pb.ServerAddress | |
| 	grpcDialOption  grpc.DialOption | |
| 	publishers      map[SessionId]*SessionEntry[*pub_client.TopicPublisher] | |
| 	publishersLock  sync.RWMutex | |
| 	subscribers     map[SessionId]*SessionEntry[*sub_client.TopicSubscriber] | |
| 	subscribersLock sync.RWMutex | |
| } | |
| 
 | |
| func NewMessageQueueAgent(option *MessageQueueAgentOptions, grpcDialOption grpc.DialOption) *MessageQueueAgent { | |
| 
 | |
| 	// initialize brokers which may change later | |
| 	var brokers []pb.ServerAddress | |
| 	for _, broker := range option.SeedBrokers { | |
| 		brokers = append(brokers, broker) | |
| 	} | |
| 
 | |
| 	return &MessageQueueAgent{ | |
| 		option:         option, | |
| 		brokers:        brokers, | |
| 		grpcDialOption: grpcDialOption, | |
| 		publishers:     make(map[SessionId]*SessionEntry[*pub_client.TopicPublisher]), | |
| 		subscribers:    make(map[SessionId]*SessionEntry[*sub_client.TopicSubscriber]), | |
| 	} | |
| } | |
| 
 | |
| func (a *MessageQueueAgent) brokersList() []string { | |
| 	var brokers []string | |
| 	for _, broker := range a.brokers { | |
| 		brokers = append(brokers, broker.String()) | |
| 	} | |
| 	return brokers | |
| }
 |