go 连接阿里云mqtt消息队列实现mqtt后台管理

go 连接阿里云mqtt消息队列实现mqtt后台管理

package albaba

import (
   "fmt"
   openapi "github.com/alibabacloud-go/darabonba-openapi/client"
   onsmqtt20200420 "github.com/alibabacloud-go/onsmqtt-20200420/client"
   "github.com/alibabacloud-go/tea/tea"
   "os"
   "src/goProject1/config"
)

var (
   addr             string
   AccessKey_ID     string
   AccessKey_Secret string
   InstanceId       string
   token            string
   client           *onsmqtt20200420.Client
)

func init() {
   addr = config.ENV["alibaba_mq"]["addr"]
   AccessKey_ID = config.ENV["alibaba_mq"]["AccessKey_ID"]
   AccessKey_Secret = config.ENV["alibaba_mq"]["AccessKey_Secret"]
   InstanceId = config.ENV["alibaba_mq"]["InstanceId"]
   client, _ = CreateClient(tea.String(AccessKey_ID), tea.String(AccessKey_Secret))
   _, _ = applyToken()
}

func CreateClient(accessKeyId *string, accessKeySecret *string) (_result *onsmqtt20200420.Client, _err error) {
   config_ := &openapi.Config{
      // 您的AccessKey ID
      AccessKeyId: accessKeyId,
      // 您的AccessKey Secret
      AccessKeySecret: accessKeySecret,
   }
   // 访问的域名
   config_.Endpoint = tea.String(addr)
   _result = &onsmqtt20200420.Client{}
   _result, _err = onsmqtt20200420.NewClient(config_)
   return _result, _err
}

func applyToken() (string, error) {
   _, err := queryToken(token)
   if err == nil {
      return "", err
   }

   //timeUnixNano:=time.Now().UnixNano()
   applyTokenRequest := &onsmqtt20200420.ApplyTokenRequest{
      InstanceId: tea.String(InstanceId),
      ExpireTime: tea.Int64(324000000000000000),
      Resources:  tea.String("mao"),
      Actions:    tea.String("R,W"),
   }
   // 复制代码运行请自行打印 API 的返回值
   res, _err := client.ApplyToken(applyTokenRequest)
   if _err != nil {
      fmt.Println("ApplyToken", " err")
      return "", _err
   }
   token = *res.Body.Token
   return *res.Body.Token, nil
}

func queryToken(token string) (*onsmqtt20200420.QueryTokenResponse, error) {
   queryTokenRequest := &onsmqtt20200420.QueryTokenRequest{
      InstanceId: tea.String(InstanceId),
      Token:      tea.String(token),
   }
   // 复制代码运行请自行打印 API 的返回值
   res, _err := client.QueryToken(queryTokenRequest)
   if _err != nil {
      //fmt.Println("queryToken", " err")
      return res, _err
   }
   return res, nil
}

func sendMessage(topic, payload string) (*onsmqtt20200420.SendMessageResponse, error) {
   //queryToken(token)
   //}

   sendMessageRequest := &onsmqtt20200420.SendMessageRequest{
      InstanceId: tea.String(InstanceId),
      MqttTopic:  tea.String(topic),
      Payload:    tea.String(payload),
   }
   //fmt.Println(sendMessageRequest)

   //复制代码运行请自行打印 API 的返回值
   res, _err := client.SendMessage(sendMessageRequest)
   if _err != nil {
      fmt.Println("是否违法")
      return nil, _err
   }
   return res, _err
}

func _main(args []*string) (_err error) {

   a, _ := sendMessage("mao", "hello sd")
   fmt.Println(a)
   //fmt.Println(a.Body)

   fmt.Println("=== sucessful ===")
   return _err
}

func send() {

}

func Main() {
   err := _main(tea.StringSlice(os.Args[1:]))
   if err != nil {
      fmt.Println(err)
      //panic(err)
   }
}

//批量查询客户端在线状态
func QueryClientsOnline(clientIdList []string) (*onsmqtt20200420.BatchQuerySessionByClientIdsResponse, error) {
   var clientIdList_ = make([]*string, len(clientIdList))
   for i, s := range clientIdList {
      clientIdList_[i] = tea.String(s)
   }
   batchQuerySessionByClientIdsRequest := &onsmqtt20200420.BatchQuerySessionByClientIdsRequest{
      InstanceId:   tea.String(InstanceId),
      ClientIdList: clientIdList_,
   }
   // 复制代码运行请自行打印 API 的返回值
   res, _err := client.BatchQuerySessionByClientIds(batchQuerySessionByClientIdsRequest)
   if _err != nil {
      return nil, _err
   }
   //fmt.Println(res)
   return res, nil
}

//查询设备连接信息
func QueryClientOnline(clientId string) (*onsmqtt20200420.QuerySessionByClientIdResponse, error) {

   querySessionByClientIdRequest := &onsmqtt20200420.QuerySessionByClientIdRequest{
      ClientId:   tea.String(clientId),
      InstanceId: tea.String(InstanceId),
   }
   // 复制代码运行请自行打印 API 的返回值
   res, _err := client.QuerySessionByClientId(querySessionByClientIdRequest)
   if _err != nil {
      return nil, _err
   }
   //fmt.Println(res)
   return res, nil
}

//向微消息队列 MQTT 版发送单条消息
func SendMessage(topic, payload string) (*onsmqtt20200420.SendMessageResponse, error) {

   sendMessageRequest := &onsmqtt20200420.SendMessageRequest{
      tea.String(topic), tea.String(InstanceId), tea.String(payload),
   }
   // 复制代码运行请自行打印 API 的返回值
   res, _err := client.SendMessage(sendMessageRequest)
   if _err != nil {
      return nil, _err
   }
   //fmt.Println(res)

   return res, nil
}

//校验 Token 的有效性
//queryTokenRequest := &onsmqtt20200420.QueryTokenRequest{
//Token: tea.String("fvdf"),
//InstanceId: tea.String("gdb"),
//}
 复制代码运行请自行打印 API 的返回值
//_, _err = client.QueryToken(queryTokenRequest)
//if _err != nil {
//return _err
//}

//吊销 Token
func RevokeToken(token string) error {

   revokeTokenRequest := &onsmqtt20200420.RevokeTokenRequest{
      Token:      tea.String(token),
      InstanceId: tea.String(InstanceId),
   }
   // 复制代码运行请自行打印 API 的返回值
   res, _err := client.RevokeToken(revokeTokenRequest)
   if _err != nil {
      return _err
   }
   fmt.Println(res)

   return nil
}

//创建临时访问 Token
//applyTokenRequest := &onsmqtt20200420.ApplyTokenRequest{
//    Resources: tea.String("cvdf"),
//    InstanceId: tea.String("cxvb"),
//    Actions: tea.String("r"),
//    ExpireTime: tea.Int64(1),
//  }
//  // 复制代码运行请自行打印 API 的返回值
//  _, _err = client.ApplyToken(applyTokenRequest)
//  if _err != nil {
//    return _err
//  }

//创建 Group ID
func CreateGroupID(groupID string) (*onsmqtt20200420.CreateGroupIdResponse, error) {

   createGroupIdRequest := &onsmqtt20200420.CreateGroupIdRequest{
      GroupId:    tea.String(groupID),
      InstanceId: tea.String(InstanceId),
   }
   // 复制代码运行请自行打印 API 的返回值
   res, _err := client.CreateGroupId(createGroupIdRequest)
   if _err != nil {
      return nil, _err
   }
   //fmt.Println(res)

   return res, nil
}

//删除 Group ID
func DeleteGroupID(groupID string) (*onsmqtt20200420.DeleteGroupIdResponse, error) {

   deleteGroupIdRequest := &onsmqtt20200420.DeleteGroupIdRequest{
      tea.String(groupID), tea.String(InstanceId),
   }
   // 复制代码运行请自行打印 API 的返回值
   res, _err := client.DeleteGroupId(deleteGroupIdRequest)
   if _err != nil {
      return nil, _err
   }

   return res, nil
}

//查看某实例下的所有 Group ID
func QueryGroupID() (*onsmqtt20200420.ListGroupIdResponse, error) {

   listGroupIdRequest := &onsmqtt20200420.ListGroupIdRequest{
      InstanceId: tea.String(InstanceId),
   }
   //复制代码运行请自行打印 API 的返回值
   res, _err := client.ListGroupId(listGroupIdRequest)
   if _err != nil {
      return nil, _err
   }
   return res, nil
}

//查询设备的访问凭证
func GetDeviceCredential(clientId string) (*onsmqtt20200420.GetDeviceCredentialResponse, error) {
   getDeviceCredentialRequest := &onsmqtt20200420.GetDeviceCredentialRequest{
      ClientId:   tea.String(clientId),
      InstanceId: tea.String(InstanceId),
   }
   // 复制代码运行请自行打印 API 的返回值
   return client.GetDeviceCredential(getDeviceCredentialRequest)
}

//更新设备的访问凭证
func UpdateDeviceCredential(clientId string) (*onsmqtt20200420.RefreshDeviceCredentialResponse, error) {
   refreshDeviceCredentialRequest := &onsmqtt20200420.RefreshDeviceCredentialRequest{
      ClientId:   tea.String(clientId),
      InstanceId: tea.String(InstanceId),
   }
   // 复制代码运行请自行打印 API 的返回值
   return client.RefreshDeviceCredential(refreshDeviceCredentialRequest)
}

//为某个设备注册访问凭证
func SetDeviceCredential(clientId string) (*onsmqtt20200420.RegisterDeviceCredentialResponse, error) {
   registerDeviceCredentialRequest := &onsmqtt20200420.RegisterDeviceCredentialRequest{
      ClientId:   tea.String(clientId),
      InstanceId: tea.String(InstanceId),
   }
   // 复制代码运行请自行打印 API 的返回值
   return client.RegisterDeviceCredential(registerDeviceCredentialRequest)
}

//注销设备的访问凭证
func DeleteDeviceCredential(clientId string) (*onsmqtt20200420.UnRegisterDeviceCredentialResponse, error) {
   unRegisterDeviceCredentialRequest := &onsmqtt20200420.UnRegisterDeviceCredentialRequest{
      ClientId:   tea.String(clientId),
      InstanceId: tea.String(InstanceId),
   }
   // 复制代码运行请自行打印 API 的返回值
   return client.UnRegisterDeviceCredential(unRegisterDeviceCredentialRequest)
}

func GetClientAccessKey(clientID string) (DeviceAccessKeyId, DeviceAccessKeySecret string) {

   res, err := GetDeviceCredential(clientID)
   if err != nil || res == nil {
      res2, err := SetDeviceCredential(clientID)
      if err != nil {
         return "", ""
      }
      DeviceAccessKeyId = *res2.Body.DeviceCredential.DeviceAccessKeyId
      DeviceAccessKeySecret = *res2.Body.DeviceCredential.DeviceAccessKeySecret
      return
   }
   DeviceAccessKeyId = *res.Body.DeviceCredential.DeviceAccessKeyId
   DeviceAccessKeySecret = *res.Body.DeviceCredential.DeviceAccessKeySecret
   return
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值