Run consumer and api on golang port
#php editor Strawberry will introduce how to run consumers and APIs on the Golang port at the same time in this article. In modern applications, it is often necessary to handle consumer and API requests simultaneously to provide better user experience and functionality. As an efficient programming language, Golang has the characteristics of concurrency performance and lightweight, which is very suitable for building such applications. Through the guidance of this article, you will learn how to use Golang to write consumers and APIs and run them on the same port, thus simplifying application deployment and maintenance. let's start!
Question content
I have a go api project and I also run a worker thread (rabbitmq). I just discovered an issue where my workers and my http listener and service don't work together. When I run the worker, the api port is not reached.
This is what my code looks like.
app.go
func (a *app) startworker() { connection, err := amqp091.dial(os.getenv("amqp_url")) if err != nil { panic(err) } defer connection.close() consumer, err := events.newconsumer(connection, database.getdatabase(a.database)) if err != nil { panic(err) } consumer.listen(os.args[1:]) } func (a *app) run(addr string) { logs := log.new(os.stdout, "my-service", log.lstdflags) server := &http.server{ addr: addr, handler: a.router, errorlog: logs, idletimeout: 120 * time.second, // max time for connections using tcp keep-alive readtimeout: 5 * time.second, writetimeout: 10 * time.second, } go func() { if err := server.listenandserve(); err != nil { logs.fatal(err) } }() // trap sigterm or interrupt and gracefully shutdown the server c := make(chan os.signal) signal.notify(c, os.interrupt) signal.notify(c, os.kill) sig := <-c logs.println("recieved terminate, graceful shutdown", sig) tc, _ := context.withtimeout(context.background(), 30*time.second) server.shutdown(tc) }
this is mine
consumer.go
// newconsumer returns a new consumer func newconsumer(conn *amqp.connection, db *mongo.database) (consumer, error) { consumer := consumer{ conn: conn, db: db, } err := consumer.setup() if err != nil { return consumer{}, err } return consumer, nil } // listen will listen for all new queue publications // and print them to the console. func (consumer *consumer) listen(topics []string) error { ch, err := consumer.conn.channel() if err != nil { return err } defer ch.close() if err != nil { return err } msgs, err := ch.consume("update.package.rating", "", true, false, false, false, nil) if err != nil { return err } forever := make(chan bool) go func() { for msg := range msgs { switch msg.routingkey { case "update.package.rating": worker.ratepackage(packagerepo.newpackagesrepository(consumer.db), msg.body) } // acknowledege received event log.printf("received a message: %s", msg.body) } }() log.printf("[*] waiting for message [exchange, queue][%s, %s]. to exit press ctrl+c", getexchangename(), "update.package.rating") <-forever return nil }
main.go
func main() { start := app.App{} start.StartApp() start.StartWorker() start.Run(":3006") }
Port 3006 not reached.
I'm using gin-gonic to serve my http requests.
Any help welcome.
Solution
I encountered a similar problem when using the gin framework. Solved the problem by running my consumer in a go routine. I called my consumer like below.
go notificationCallback.ConsumeBankTransaction()
Both the server and rabbitmq consumer run seamlessly. Still monitor performance to see if it's robust and resilient enough.
The above is the detailed content of Run consumer and api on golang port. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Go language pack import: What is the difference between underscore and without underscore?

How to implement short-term information transfer between pages in the Beego framework?

How to convert MySQL query result List into a custom structure slice in Go language?

How can I define custom type constraints for generics in Go?

How do I write mock objects and stubs for testing in Go?

How to write files in Go language conveniently?

How can I use tracing tools to understand the execution flow of my Go applications?
