Go Messaging System

Nats Message Echo System Intro Nats Server는 IoT 메시징 및 마이크로 서비스 아키텍처를 위한 간단하고 고성능의 오픈소스 메시징 시스템 입니다. go로 작성되어 있으며 Python, Java, Ruby, Node.js 등으로 작성된 클라이언트가 있습니다. NATS Design Goals The core principles underlying NATS are performance, scalability, and ease-of-use. Based on these principles, NATS is designed around the following core features: Highly performant (fast) Always on and available (dial tone) Extremely lightweight (small footprint) Support for multiple qualities of service (including guaranteed “at-least-once” delivery with NATS Streaming) Support for various messaging models and use cases (flexible) Pub Code var urls = flag.String("s", nats.DefaultURL, "The nats server URLs (separated by comma)") log.SetFlags(0) flag.Usage = usage flag.Parse() args := flag.Args() if len(args) < 2 { usage() } nc, err := nats.Connect(*urls) if err != nil { log.Fatal(err) } defer nc.Close() subj, msg := args[0], []byte(args[1]) for { nc.Publish(subj, msg) nc.Flush() } if err := nc.LastError(); err != nil { log.Fatal(err) } else { log.Printf("Published [%s] : '%s'\n", subj, msg) } Sub Code var urls = flag.String("s", nats.DefaultURL, "The nats server URLs (separated by comma)") var showTime = flag.Bool("t", false, "Display timestamps") log.SetFlags(0) flag.Usage = usage flag.Parse() args := flag.Args() if len(args) < 1 { usage() } nc, err := nats.Connect(*urls) if err != nil { log.Fatalf("Can't connect: %v\n", err) } subj, i := args[0], 0 nc.Subscribe(subj, func(msg *nats.Msg) { i += 1 printMsg(msg, i) }) nc.Flush() if err := nc.LastError(); err != nil { log.Fatal(err) } log.Printf("Listening on [%s]\n", subj) if *showTime { log.SetFlags(log.LstdFlags) }

May 2, 2019 · 2 min · 248 words · Hillfolk

Go Cobra 사용하기

Cobra는 강력한 Cli 라이브러리로서 Go 기반에서 구동된다. 해당 모듈은 docker, kubernetes, hugo 등에서 사용될 정도로 안정적인 라이브러리 이다. cobra github Install go get을 이용해서 package를 설치하고 코드에 import 해준다. go get -u github.com/spf13/cobra/cobra import "github.com/spf13/cobra" Cobra Generator Cobra Generator를 사용하면 손쉽게 Cobra를 적용할수 있다. cobra 팩키지가 설치된 경우 자동으로 cobra 프로젝트를 추가하거나 Command을 추가하는 명령을 사용할 수 있다. Generator는 $GOPATH 하위 리소스에서 사용가능하다. 초기화 init 명령으로 cobra에게 적합한 프로젝트 구성 및 자동으로 cobra 코드를 생성해 준다. ...

May 1, 2019 · 1 min · 121 words · Hillfolk

Go MongoDB 사용하기

MongoDB MongoDB는 C++로 작성된 오픈소스 문서지향(Document-Oriented) 적 Cross-platform 데이터베이스이며, 뛰어난 확장성과 성능을 가지고 있다. Go용 MongoDB 드라이버 Go 에서 Mongodb 용 라이브러리는 몇개 정도 지원 되는것으로 보인다. 그중에 mongo-go-driver 공식 Go 드라이버를 기준으로 작성 하였습니다. Install go get go.mongodb.org/mongo-driver/mongo import & Create client import시 주소에 주의해야한다. 일부 문서에는 이전 github 주소로 되어 있는 경우가 있다. import "go.mongodb.org/mongo-driver/mongo" import "go.mongodb.org/mongo-driver/mongo/options" client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017")) MongoDB Connect MongoDB 연결시 일정시간이 지나면 연결 종료 신호를 보낼수 있도록 context.WithTimOut 함수를 이용하여 타임아웃 시간을 지정한후 연결한다. 연결 체크는 Ping 함수를 통해서할수 있다. ...

May 1, 2019 · 2 min · 400 words · Hillfolk

Firedac에서 SQLite 사용하기(Window)#

Firedac에서 SQLite 사용하기(Window)# firedac은 델파이에서 기본적으로 제공하는 데이터베이스 엑서스 컴포넌트입니다. Window 나 MacOS 또는 모바일에서 다 사용이 가능하기 때문에 최근에는 가장 쉽게 접근할수 있는 컴포넌트입니다. 회사에서 프로젝트를 진행하면서 로컬에서 데이터베이스를 사용해야 하기 때문에 가벼운 SQLite 를 사용해야 할때 쉽게 설치가 가능하기 때문에 사용해봤습니다. 그러면서 FireDac에서 SQLite 를 사용하는 방법에 대해서 간단하게 포스트 남깁니다. FireDac에서 SQLite3 연결하기 우선 연결을 위해서는 Driver 를 설정해야 합니다. 그리고 TFDPhysSQLiteDriverLink 를 Form에 올려 놓고 VenderHome 와 VenderLib 를 지정합니다. 저늘 실행파일이 실행되는 곳에서 SQLite3 폴더를 만들고 그안에 DLL 파일을 넣었습니다. 컴포넌트에 아래와 같이 지정해 줍니다. ...

February 26, 2019 · 1 min · 182 words · Hillfolk

Lazarus Raspberry Pi LED Test

Lazarus Raspberry Pi LED Test 라자루스에서 GPIO를 사용해보았다. 우선 지정된 핀 코드만 잘 맞으면 아주 쉽습니다. 저의 경우는 라즈베리파이에서 GPIO를 처음 써본거라 많이 삽질 했습니다. 우선 라즈베리파이에서 Lazarus 를 설치하고 LED를 켜는 부분까지 설명해 보도록 하겠습니다. 라자루스 설치 우선 라자루스를 설치하는 법은 간단합니다. 라즈베리 파이에서도 팩키지 설치가 쉽기 때문에 apt-get 을 사용해서 쉽게 설치 할수 있습니다. 하지만 시간이 조금 걸리는 편입니다. 설치 방법은 [Lazarus wiki] 를 참조하면 아주 쉽습니다. sudo apt-get update sudo apt-get upgrade sudo apt-get install fpc sudo apt-get install lazarus Source Code 핀 지정 ...

February 26, 2019 · 2 min · 267 words · Hillfolk