Skip to content

joe-at-startupmedia/posix_mq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

posix_mq

a Go wrapper and utility for POSIX Message Queues

posix_mq is a Go wrapper for POSIX Message Queues. It's important you read the manual for POSIX Message Queues, ms_send(2) and mq_receive(2) before using this library. posix_mq is a very light wrapper, and will not hide any errors from you.

Example

Sender

package main

import (
	"fmt"
	"log"
	"time"

	"github.com/joe-at-startupmedia/posix_mq"
)

const maxSendTickNum = 10

func main() {
	mq, err := posix_mq.NewMessageQueue(&posix_mq.QueueConfig{
		Name:  "posix_mq_example_simple",
		Flags: posix_mq.O_WRONLY | posix_mq.O_CREAT,
		Mode:  0666,
	})
	if err != nil {
		log.Fatalf("Sender: error initializing %s", err)
	}

	count := 0
	for {
		count++
		if err = mq.Send([]byte(fmt.Sprintf("Hello, World : %d\n", count)), 0); err != nil {
			fmt.Printf("Sender: error sending message: %s\n", err)
			continue
		}

		fmt.Println("Sender: Sent a new message")

		if count >= maxSendTickNum {
			break
		}

		time.Sleep(1 * time.Second)
	}
	fmt.Println("Sender: finished")
}

Receiver

package main

import (
	"fmt"
	"log"

	"github.com/joe-at-startupmedia/posix_mq"
)

const maxSendTickNum = 10

func main() {
	mq, err := posix_mq.NewMessageQueue(&posix_mq.QueueConfig{
		Name:  "posix_mq_example_simple",
		Flags: posix_mq.O_RDONLY
		Mode:  0666,
	})
	if err != nil {
		log.Fatalf("Receiver: error initializing %s", err)
	}
	defer func() {
		if err := mq.Unlink(); err != nil {
			log.Println(err)
		}
		fmt.Println("Receiver: finished")
	}()

	fmt.Println("Receiver: Start receiving messages")

	count := 0
	for {
		count++

		msg, _, err := mq.Receive()
		if err != nil {
			fmt.Printf("Receiver: error getting message: %s\n", err)
			continue
		}
		
		fmt.Printf("Receiver: got new message: %s\n", string(msg))

		if count >= maxSendTickNum {
			break
		}
	}
}

Acknowledgement

It's inspired by Shopify/sysv_mq

About

a golang wrapper and utility for posix_mq

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published