func runReceiver(qnum int) { ltag := tag + "-runreceiver" ll.Printf("%stag:%s connsess:%s start qnum:%d\n", exampid, ltag, sngecomm.Lcs, qnum) // Standard example connect sequence n, conn, e := sngecomm.CommonConnect(exampid, ltag, ll) if e != nil { ll.Fatalf("%stag:%s connsess:%s error:%s\n", exampid, ltag, sngecomm.Lcs, e.Error()) // Handle this ...... } // conn.SetSubChanCap(senv.SubChanCap()) // Experiment with this value, YMMV // Receives receiveMessages(conn, qnum, n) ll.Printf("%stag:%s connsess:%s receives_complete qnum:%d\n", exampid, ltag, conn.Session(), qnum) // Standard example disconnect sequence e = sngecomm.CommonDisconnect(n, conn, exampid, ltag, ll) if e != nil { ll.Fatalf("%stag:%s connsess:%s error:%s\n", exampid, ltag, conn.Session(), e.Error()) // Handle this ...... } sngecomm.ShowStats(exampid, "recv_"+fmt.Sprintf("%d", qnum), conn) wgr.Done() }
func ShowRunParms(exampid string) { llu.Printf("%sHOST:%v\n", exampid, os.Getenv("STOMP_HOST")) llu.Printf("%sPORT:%v\n", exampid, os.Getenv("STOMP_PORT")) llu.Printf("%sPROTOCOL:%v\n", exampid, senv.Protocol()) llu.Printf("%sVHOST:%v\n", exampid, senv.Vhost()) llu.Printf("%sNQS:%v\n", exampid, Nqs()) llu.Printf("%sNMSGS:%v\n", exampid, senv.Nmsgs()) llu.Printf("%sSUBCHANCAP:%v\n", exampid, senv.SubChanCap()) llu.Printf("%sRECVFACT:%v\n", exampid, RecvFactor()) llu.Printf("%sSENDFACT:%v\n", exampid, SendFactor()) llu.Printf("%sRECVWAIT:%t\n", exampid, RecvWait()) llu.Printf("%sSENDWAIT:%t\n", exampid, SendWait()) llu.Printf("%sACKMODE:%v\n", exampid, AckMode()) }
// Show a number of writers and readers operating concurrently from unique // destinations. func main() { st := time.Now() sngecomm.ShowRunParms(exampid) ll.Printf("%stag:%s connsess:%s main_starts\n", exampid, tag, sngecomm.Lcs) ll.Printf("%stag:%s connsess:%s main_profiling pprof:%v\n", exampid, tag, sngecomm.Lcs, sngecomm.Pprof()) ll.Printf("%stag:%s connsess:%s main_current_GOMAXPROCS gmp:%v\n", exampid, tag, sngecomm.Lcs, runtime.GOMAXPROCS(-1)) if sngecomm.SetMAXPROCS() { nc := runtime.NumCPU() ll.Printf("%stag:%s connsess:%s main_current_num_cpus cncpu:%v\n", exampid, tag, sngecomm.Lcs, nc) gmp := runtime.GOMAXPROCS(nc) ll.Printf("%stag:%s connsess:%s main_previous_num_cpus pncpu:%v\n", exampid, tag, sngecomm.Lcs, gmp) ll.Printf("%stag:%s connsess:%s main_current_GOMAXPROCS gmp:%v\n", exampid, tag, sngecomm.Lcs, runtime.GOMAXPROCS(-1)) } // Wait flags sw = sngecomm.SendWait() rw = sngecomm.RecvWait() sf = sngecomm.SendFactor() rf = sngecomm.RecvFactor() ll.Printf("%stag:%s connsess:%s main_wait_sleep_factors sw:%v rw:%v sf:%v rf:%v\n", exampid, tag, sngecomm.Lcs, sw, rw, sf, rf) // Number of queues nqs := sngecomm.Nqs() // Standard example connect sequence var e error n, conn, e = sngecomm.CommonConnect(exampid, tag, ll) if e != nil { if conn != nil { ll.Printf("%stag:%s connsess:%s Connect Response headers:%v body%s\n", exampid, tag, conn.Session(), conn.ConnectResponse.Headers, string(conn.ConnectResponse.Body)) } ll.Fatalf("%stag:%s connsess:%s main_on_connect error:%v", exampid, tag, sngecomm.Lcs, e.Error()) // Handle this ...... } // Many receivers running under the same connection can cause // (wire read) performance issues. This is *very* dependent on the broker // being used, specifically the broker's algorithm for putting messages on // the wire. // To alleviate those issues, this strategy insures that messages are // received from the wire as soon as possible. Those messages are then // buffered internally for (possibly later) application processing. In // this example, buffering occurs in the stompngo package. conn.SetSubChanCap(senv.SubChanCap()) // Experiment with this value, YMMV // Run everything wga.Add(2) go startReceivers(nqs) go startSenders(nqs) wga.Wait() // Standard example disconnect sequence e = sngecomm.CommonDisconnect(n, conn, exampid, tag, ll) if e != nil { ll.Fatalf("%stag:%s connsess:%s main_on_disconnect error:%v", exampid, tag, conn.Session(), e.Error()) // Handle this ...... } sngecomm.ShowStats(exampid, tag, conn) ll.Printf("%stag:%s connsess:%s main_elapsed:%v\n", exampid, tag, conn.Session(), time.Now().Sub(st)) }