Files
Stephen Marshall a4b9a9abaf Initial delivery of metrics code (#81)
* Initial delivery of metrics code

* Fix build issues

* Fix build issue with go vet
2018-05-24 09:15:12 +01:00

119 lines
3.1 KiB
Go

/*
This is a short sample to show how to connect to a remote
queue manager in a Go program without requiring external
client configuration such as a CCDT. Only the basic
parameters are needed here - channel name and connection information -
along with the queue manager name.
For example, run as
clientconn QMGR1 "SYSTEM.DEF.SVRCONN" "myhost.example.com(1414)"
If the MQSAMP_USER_ID environment variable is set, then a userid/password
flow is also made to authenticate to the queue manager.
There is no attempt in this sample to configure advanced security features
such TLS.
If an error occurs, the error is reported.
*/
package main
/*
Copyright (c) IBM Corporation 2017
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific
Contributors:
Mark Taylor - Initial Contribution
*/
import (
"bufio"
"fmt"
"os"
"time"
"github.com/ibm-messaging/mq-golang/ibmmq"
)
func main() {
var qMgrName string
var err error
var qMgr ibmmq.MQQueueManager
var rc int
if len(os.Args) != 4 {
fmt.Println("clientconn <qmgrname> <channelname> <conname>")
fmt.Println("")
fmt.Println("For example")
fmt.Println(" clientconn QMGR1 \"SYSTEM.DEF.SVRCONN\" \"myhost.example.com(1414)\"")
fmt.Println("All parameters are required.")
os.Exit(1)
}
// Which queue manager do we want to connect to
qMgrName = os.Args[1]
// Allocate the MQCNO and MQCD structures needed for the
// MQCONNX call.
cno := ibmmq.NewMQCNO()
cd := ibmmq.NewMQCD()
// Fill in the required fields in the
// MQCD channel definition structure
cd.ChannelName = os.Args[2]
cd.ConnectionName = os.Args[3]
// Reference the CD structure from the CNO
// and indicate that we want to use the client
// connection method.
cno.ClientConn = cd
cno.Options = ibmmq.MQCNO_CLIENT_BINDING
// Also fill in the userid and password if the MQSAMP_USER_ID
// environment variable is set. This is the same as the C
// sample programs such as amqsput.
userId := os.Getenv("MQSAMP_USER_ID")
if userId != "" {
scanner := bufio.NewScanner(os.Stdin)
csp := ibmmq.NewMQCSP()
csp.AuthenticationType = ibmmq.MQCSP_AUTH_USER_ID_AND_PWD
csp.UserId = userId
fmt.Printf("Enter password for qmgr %s: \n", qMgrName)
scanner.Scan()
csp.Password = scanner.Text()
// And make the CNO refer to the CSP structure
cno.SecurityParms = csp
}
// And connect. Wait a short time before
// disconnecting.
qMgr, err = ibmmq.Connx(qMgrName, cno)
if err == nil {
fmt.Printf("Connection to %s succeeded.\n", qMgrName)
d, _ := time.ParseDuration("5s")
time.Sleep(d)
qMgr.Disc()
rc = 0
} else {
fmt.Printf("Connection to %s failed.\n", qMgrName)
fmt.Println(err)
rc = int(err.(*ibmmq.MQReturn).MQCC)
}
fmt.Println("Done.")
os.Exit(rc)
}