Skip to content
Snippets Groups Projects
consume.go 1.27 KiB
package consume

import (
	"query-service/internal/usecases/databaseinfo"
	"query-service/internal/usecases/produce"
	"query-service/internal/usecases/request"

	"git.science.uu.nl/datastrophe/broker"
	"git.science.uu.nl/datastrophe/query-conversion"
)

// Service wraps consumer methods
// broker is Alice broker created in brockerdriver driver
type Service struct {
	brokerDriver        broker.Interface
	producer            produce.UseCase
	queryConverter      query.Converter
	requestSender       request.UseCase
	databaseInfoService databaseinfo.UseCase
}

// NewService creates a new service
func NewService(broker broker.Interface, produceService produce.UseCase, queryConverter query.Converter, requestSenderService request.UseCase, databaseInfoService databaseinfo.UseCase) *Service {
	return &Service{
		brokerDriver:        broker,
		producer:            produceService,
		queryConverter:      queryConverter,
		requestSender:       requestSenderService,
		databaseInfoService: databaseInfoService,
	}
}

// Start starts consuming
func (s *Service) Start() {

	// Create consumer
	consumer := s.brokerDriver.CreateConsumer("requests-exchange", "aql-query-queue", "aql-query-request")

	consumer.SetMessageHandler(s.HandleMessage)

	// Start consuming messages
	consumer.ConsumeMessages()
}