不走寻常路--MNS主题触发器的补充新玩法

本文涉及的产品
简介: 目前还存在几个 region 的 MNS Topic 不能支持 MNS 主题触发器,本文提供一种workaround的方法

函数计算发布了新的触发器 MNS 主题触发器,这标志着函数计算的事件源新增加了一名成员 -- 消息服务(简称 MNS))主题, 但是根据官方文档MNS主题触发器描述,还存在以下几个 region 的 MNS Topic 不能支持 MNS 主题触发器:香港, 亚太东北 1(东京), 亚太东南 1(新加坡), 美国西部1(硅谷)。

问题

Q:这几个 region 的 Topic 就不能利用函数计算的 serverless 能力了吗?

A:老司机告诉你, 这个是可以的, 下面来看看怎么在秋名山上玩漂移。

image

解决方案

image

1. 创建函数,设置http trigger, 记得权限设置为匿名访问

2. 在 topic 上 订阅的推送类型为 http, 然后把函数设置http trigger 生成url 填入 接收端地址

注意:url 不要以 / 结尾,不然可能触发不了函数,后面记得填充一个任意的 path 值.

  • 函数设置 http trigger
    image
  • topic 增加 http 订阅
    image

发送消息到MNS主题实用代码片段

函数计算 python/nodejs/php 执行环境都已经内置有mns的相关sdk,直接编写相应的函数对MNS 进行操作即可,下面示例都是针对publish message 到 MNS 主题。

  • python

    # -*- coding: utf-8 -*-
    import logging
    from mns.account import Account
    from mns.topic import DirectMailInfo, DirectSMSInfo, TopicMessage
    
    access_key_id=<your ak id>
    access_key_secret=<your ak secret>
    endpoint = "http://<region>.mns.cn-qingdao.aliyuncs.com/"
    
    def handler(event, context):
      logger = logging.getLogger()
      logger.info(event)
      
      my_account = Account(endpoint, access_key_id, access_key_secret)
      topic_name = "test-topic"
      my_topic = my_account.get_topic(topic_name)
      #init TopicMessage
      msg_body = "I am test message."
      msg = TopicMessage(msg_body, "msg_tag")
      try:
          re_msg = my_topic.publish_message(msg)
          print "Publish Message Succeed. MessageBody:%s MessageID:%s" % (msg_body, re_msg.message_id)
      except MNSExceptionBase,e:
          if e.type == "TopicNotExist":
              print "Topic not exist, please create it."
              sys.exit(1)
          print "Publish Message Fail. Exception:%s" % e
      return 'hello world'
  • nodejs

    var AliMNS = require("ali-mns");
    var account = new AliMNS.Account("<your-account-id>", "<your-key-id>", "<your-key-secret>");
    var topic = new AliMNS.Topic(<topicName>, account, 'qingdao');
    
    module.exports.handler = function(event, context, callback) { 
      console.log('hello world');
      // send message
      topic.publishP("Hello MNS topic").done(function (data) { 
        callback(null, data);
        
      });
    };
    
  • php

    <?php
    use AliyunMNS\Client;
    use AliyunMNS\Requests\PublishMessageRequest;
    
    $accessId="<your-key-id>";
    $accessKey="<your-key-secret>";
    $endPoint = "http://<your-account-id>.mns.cn-qingdao.aliyuncs.com/";
    
    $client = new Client($endPoint, $accessId, $accessKey);
    
    function handler($event, $context) {
      $topicName = "test-topic";
      global $client;
      $topic = $client->getTopicRef($topicName);//获取Topic地址
      $messageBody = 'test message';  //消息内容
      $messageTag = 'pay_success';    //消息标签
      $request = new PublishMessageRequest($messageBody,$messageTag);
      $res = $topic->publishMessage($request);
      $res->isSucceed();
    
      return "OK";
    }
相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
1月前
|
消息中间件 安全 物联网
MQTT常见问题之新增自定义主题后平台侧收不到发布的数据如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
1月前
|
消息中间件 弹性计算 物联网
MQTT常见问题之发布MQTT主题消息失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
7月前
|
传感器 物联网
详解MQTT主题和通配符
详解MQTT主题和通配符
490 0
详解MQTT主题和通配符
|
1月前
|
消息中间件 Java RocketMQ
MQ产品使用合集之在同一个 Java 进程内建立三个消费对象并设置三个消费者组订阅同一主题和标签的情况下,是否会发生其中一个消费者组无法接收到消息的现象
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
10月前
|
消息中间件 存储
消息队列之RabbitMQ之主题(Topics)模式
RabbitMQ是一个消息中间件,它接受并转发消息。它有6中工作模式,而主题模式是它的核心。在主题模式中,主要是通配符的添加与使用。
189 0
|
11月前
|
消息中间件 应用服务中间件 nginx
【RabbitMQ六】——RabbitMQ主题模式(Topic)
【RabbitMQ六】——RabbitMQ主题模式(Topic)
200 1
|
消息中间件 存储 RocketMQ
RocketMQ主题的自动创建机制
问题 在学习RocketMQ的时候,有几个疑问。 如果主题不存在,client把消息发给谁呢? 当发送消息给不存在的主题时,主题是什么时候创建的呢?
563 0
|
消息中间件
RabbitMQ 实战教程(五) 主题
RabbitMQ 实战教程(五) 主题
98 0
RabbitMQ 实战教程(五) 主题
EMQ
|
传感器 负载均衡 监控
通过案例理解 MQTT 主题与通配符
本文将通过实际案例为读者讲解MQTT主题及通配符相关概念,并对MQTT主题使用过程中常见的问题进行解答,帮助读者快速开始MQTT开发。
EMQ
588 0
通过案例理解 MQTT 主题与通配符
EMQ
|
存储 物联网 Docker
v1.8.3 进行中:MQTT X CLI 支持多主题订阅,优化输出显示
九月,MQTT 5.0客户端工具MQTT X 1.8.3版本持续开发中,为会话过期间隔添加默认值,并优化了MQTT X CLI(命令行)的默认输出显示。
EMQ
140 0
v1.8.3 进行中:MQTT X CLI 支持多主题订阅,优化输出显示

热门文章

最新文章