예제 #1
0
def run_produce():
    account = Account(MNS_ENDPOINT, ALI_ACCESSKEYID, ALI_ACCESSKEYSECRET)
    q = account.get_queue(QUEUE_NAME)

    queue_meta = QueueMeta()
    queue_meta.set_visibilitytimeout(100)
    queue_meta.set_maximum_message_size(10240)
    queue_meta.set_message_retention_period(3600)
    queue_meta.set_delay_seconds(10)
    queue_meta.set_polling_wait_seconds(20)
    queue_meta.set_logging_enabled(True)

    try:
        q_url = q.create(queue_meta)
        sys.stdout.write("Create Queue Succeed!\nQueueURL:%s\n\n" % q_url)
    except MNSExceptionBase as e:
        sys.stderr.write("Create Queue Fail!\nException:%s\n\n" % e)
        sys.exit(1)

    for i in range(1, 10):
        msg_body = "Test Message n. {} at {}".format(
            i,
            datetime.now().isoformat())
        message = Message(msg_body)
        message.set_delayseconds(0)
        message.set_priority(10)
        try:
            send_msg = q.send_message(message)
            sys.stdout.write(
                "Send Message Succeed.\nMessageBody:%s\nMessageId:%s\nMessageBodyMd5:%s\n\n"
                % (msg_body, send_msg.message_id, send_msg.message_body_md5))
        except MNSExceptionBase as e:
            sys.stderr.write("Send Message Fail!\nException:%s\n\n" % e)
            sys.exit(1)
예제 #2
0
def my_send_msg(num):

    # 从sample.cfg中读取基本配置信息
    ## WARNING: Please do not hard code your accessId and accesskey in next line.(more information: https://yq.aliyun.com/articles/55947)
    accid, acckey, endpoint, token = MNSSampleCommon.LoadConfig()

    # 初始化 my_account, my_queue
    my_account = Account(endpoint, accid, acckey, token)
    queue_name = "MyQueue1"
    my_queue = my_account.get_queue(queue_name)

    try:
        # msg_body = "I am test message %s." % i
        msg_body = num
        msg = Message(msg_body)
        re_msg = my_queue.send_message(msg)
        # print
        # "Send Message Succeed! MessageBody:%s MessageID:%s" % (msg_body, re_msg.message_id)
    except MNSExceptionBase, e:
        if e.type == "QueueNotExist":
            print
            "Queue not exist, please create queue before send message."
            sys.exit(0)
        print
        "Send Message Fail! Exception:%s\n" % e
예제 #3
0
def run_consume():
    account = Account(MNS_ENDPOINT, ALI_ACCESSKEYID, ALI_ACCESSKEYSECRET)
    q = account.get_queue(QUEUE_NAME)

    while True:
        try:
            wait_seconds = 10
            recv_msg = q.receive_message(wait_seconds)
            sys.stdout.write(
                "Receive Message Succeed! \
                            \nMessageId: %s\nMessageBodyMD5: %s \
                            \nMessageBody: %s\nDequeueCount: %s \
                            \nEnqueueTime: %s\nFirstDequeueTime: %s \
                            \nPriority: %s\nNextVisibleTime: %s \
                            \nReceiptHandle: %s\n\n" %
                (recv_msg.message_id, recv_msg.message_body_md5,
                 recv_msg.message_body, recv_msg.dequeue_count,
                 recv_msg.enqueue_time, recv_msg.first_dequeue_time,
                 recv_msg.priority, recv_msg.next_visible_time,
                 recv_msg.receipt_handle))

            q.delete_message(recv_msg.receipt_handle)
            sys.stdout.write("Delete Message Succeed.\n\n")

        except MNSExceptionBase as e:
            sys.stderr.write("Receive Message Fail!\nException:%s\n\n" % e)
            break

    try:
        q.delete()
        sys.stdout.write("Delete Queue Succeed!\n\n")
    except MNSExceptionBase as e:
        sys.stderr.write("Delete Queue Fail!\nException:%s\n\n" % e)
        sys.exit(1)
예제 #4
0
 def __init__(self):
     self.id = conf.access_key_id
     self.secret = conf.access_key_secret
     self.point = conf.queue_endpoint
     self.queue_name = conf.queue_name
     self.auth = oss2.Auth(conf.access_key_id, conf.access_key_secret)
     self.bucket = oss2.Bucket(self.auth, conf.oss_endpoint,
                               conf.bucket_name)
     self.oss_img_path = conf.oss_img_path
     client = MongoClient(conf.mongo_host)
     client['admin'].authenticate('root', 'qwer1234')
     self.userdb = client['qp_account']
     for index, subject in enumerate(_ALL_SUPPORT_SUBJECTS):
         db_name = 'qp_' + subject
         self.db[index] = client[db_name]
     logging.critical('connect mongodb success:{}'.format(conf.mongo_host))
     if self.id is None or self.secret is None or self.point is None or self.queue_name is None:
         raise Exception('lose conf')
     try:
         self.account = Account(self.point, self.id, self.secret)
         self.queue = self.account.get_queue(self.queue_name)
         logging.critical('init_MNS success:')
         logging.critical(u'id:{}, point:{}, queue_name'.format(
             self.id, self.point, self.queue_name))
     except:
         traceback.print_exc()
         raise Exception('connect MNS fail')
예제 #5
0
    def __init__(self):
        # 读取邮箱信息
        self.db = Database(
            'mysql+mysqldb://spider_admin:'
            '[email protected]:'
            '3306/spider?charset=utf8',
            encoding='utf-8')

        # 初始化数据库
        self.db1 = Database(
            'mysql+mysqldb://%s:%s@%s:%s/%s?charset=utf8' %
            (MYSQL_USER, MYSQL_PASSWD, MYSQL_HOST, MYSQL_PORT, MYSQL_DB),
            encoding='utf-8')

        # 初始化MNS
        self.mns_account = Account(MNS_ENDPOINT, MNS_ACCID, MNS_ACCKEY,
                                   MNS_TOKEN)
        self.mns_client = self.mns_account.get_queue(MNS_QUEUE)

        self.logger = Logger.timed_rt_logger()
        self.queue = RedisQueue('t_mail_by_date',
                                host=REDIS_HOST,
                                port=REDIS_PORT)
        self.robot = DingDingRobot(
            access_token="eb749abfe9080a69da6524b77f589b8f6ddbc"
            "c182c7a41bf095b095336edb0a1")
예제 #6
0
    def __init__(self):
        self.set_logger()
        #加载阿里云相关配置
        self.mns_endpoint = get_config("MNS", "mns_endpoint")
        self.mns_access_id = get_config("MNS", "mns_access_id")
        self.mns_access_key = get_config("MNS", "mns_access_key")
        self.mns_queue_name = get_config("MNS", "mns_queue_name")

        self.oss_endpoint = get_config("OSS", "oss_endpoint")
        self.oss_access_id = get_config("OSS", "oss_access_id")
        self.oss_access_key = get_config("OSS", "oss_access_key")
        self.oss_bucket_name = get_config("OSS", "oss_bucket_name")

        #加载rtmp相关配置
        self.max_stream_count = int(get_config("Base", "max_stream_count"))
        self.max_retries = 3

        #初始化 msn account, queue
        self.mns_account = Account(self.mns_endpoint, self.mns_access_id,
                                   self.mns_access_key)
        self.mns_queue = self.mns_account.get_queue(self.mns_queue_name)
        self.mns_queue.set_encoding(False)

        self.publish_count = 0
        self.publish_mutex = threading.Lock()

        self.bucket = oss2.Bucket(
            oss2.Auth(self.oss_access_id, self.oss_access_key),
            self.oss_endpoint, self.oss_bucket_name)
예제 #7
0
    def insert_db(self, item):
        try:
            self.sqlalchemy_handle.session.execute(
                spider_search.ResumeRaw.__table__.insert(), item
            )
            self.sqlalchemy_handle.session.commit()
        except Exception as e:
            self.sqlalchemy_handle.session.rollback()
            self.logger.exception("入库失败, 回滚: %s" % e)
            raise e
        sql_id = self.sqlalchemy_handle.session.execute(
            "select last_insert_id()").first()[0]

        self.logger.info("入库成功. %s" % str(sql_id))

        try:
            resume_uuid = uuid.uuid1()
            mns_data = {
                "channelType": "WEB",
                "content": {
                    "content": item['content'],
                    "id": sql_id,
                    "createBy": "python",
                    "createTime": int(time.time() * 1000),
                    "ip": '',
                    'emailJobType': item['emailJobType'],
                    'emailCity': item['emailCity'],
                    'deliverJobName': '',
                    'deliverJobCity': '',
                    "resumeSubmitTime": '',
                    "resumeUpdateTime": '',
                    "source": item['source'],
                    "trackId": str(resume_uuid),
                    "avatarUrl": '',
                },
                "interfaceType": "PARSE",
                "resourceDataType": "RAW",
                "resourceType": "RESUME_SEARCH",
                "source": item['source'],
                "trackId": resume_uuid,
                "traceID": resume_uuid,
                "callSystemID": 'five_one_python3_scrapy'
            }
            dumps = json.dumps(mns_data, ensure_ascii=False)

            buf = StringIO()
            f = gzip.GzipFile(mode='wb', fileobj=buf)
            f.write(dumps)
            f.close()
            msg_body = base64.b64encode(buf.getvalue())
            msg = Message(msg_body)
            # 初始化MNS
            mns_account = Account(MNS_ENDPOINT, MNS_ACCID, MNS_ACCKEY,
                                  MNS_TOKEN)
            mns_client = mns_account.get_queue(MNS_QUEUE)
            mns_client.send_message(msg)
            self.logger.info("推送mns成功. %s" % str(sql_id))
        except Exception as e:
            self.logger.exception("推送mns失败: %s" % e)
예제 #8
0
 def __init__(self):
     """客户端初始化"""
     cf = ConfigParser.ConfigParser()
     cf.read("aliyun.conf")
     host = cf.get('AccessKey_mns',"Host")
     accessid = cf.get('AccessKey_mns',"Access_ID")
     accesskey = cf.get('AccessKey_mns',"Access_Key")
     self.cli = Account(host,accessid,accesskey)
예제 #9
0
 def __init__(self):
     self.client = AcsClient(app.config.get("ALI_ACCESS_KEY"),
                             app.config.get("ALI_ACCESS_SECRET"),
                             app.config.get("BASE_REGION"))
     self.account = Account(app.config.get("MNS_ENDPOINT"),
                            app.config.get("ALI_ACCESS_KEY"),
                            app.config.get("ALI_ACCESS_SECRET"), "")
     self.wait_seconds = 10
     self.kube = Kubernetes()
예제 #10
0
 def token_and_queue_refresh(self):
     """ Token过期刷新 """
     if not self.token.need_refresh:
         return
     self.token.refresh()
     if self.account:
         self.account.mns_client.close_connection()
     self.account = Account(endpoint, self.token.tmp_access_id, self.token.tmp_access_key, self.token.token)
     self.queue = self.account.get_queue(self.queue_cfg.queue_name)
     logger.info(f'{self.token.tk_desc} account and queue ready')
예제 #11
0
    def get_producer(self, settings):
        if self._mns_producer:
            return self._mns_producer

        account = Account(
            host=settings['MNS_ACCOUNT_ENDPOINT'],
            access_id=settings['MNS_ACCESSKEY_ID'],
            access_key=settings['MNS_ACCESSKEY_SECRET'],
            logger=logging.getLogger('evascrapy.pipelines.AliyunMnsPipeline'),
            debug=False,
        )
        self._mns_producer = account.get_queue(settings['MNS_QUEUE_NAME'])
        return self._mns_producer
예제 #12
0
def send_message(tel="18611846371", module="hadoop", message="error"):
    # 从https://account.console.aliyun.com/#/secure获取$YourAccountid
    # 从https://ak-console.aliyun.com/#/accesskey获取$YourAccessId和$YourAccessKey
    # 从http://$YourAccountId.mns.cn-hangzhou.aliyuncs.com获取$YourMNSEndpoint, eg. http://1234567890123456.mns.cn-hangzhou.aliyuncs.com
    YourMNSEndpoint = "http://1111641897067585.mns.cn-hangzhou-internal.aliyuncs.com/"
    YourAccessId = "LTAIyhZeIPt8ivJd"
    YourAccessKey = "myvAcplJMk32PHIt2DSmWhRqcz6CHv"
    my_account = Account(YourMNSEndpoint, YourAccessId, YourAccessKey)

    YourTopicName = "sms.topic-cn-hangzhou"
    my_topic = my_account.get_topic(YourTopicName)
    #print my_topic
    '''
    Step 2. 设置SMS消息体(必须)
    注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。
    '''
    msg_body1 = "报警短信消息"
    '''
    Step 3. 生成SMS消息属性,single=False表示每个接收者参数不一样,
    single=True表示每个接收者参数一样
    '''
    # 3.1 设置SMSSignName和SMSTempateCode
    YourSignName = "app运营助手"
    YourSMSTemplateCode = "SMS_32785106"

    direct_sms_attr1 = DirectSMSInfo(free_sign_name=YourSignName,
                                     template_code=YourSMSTemplateCode,
                                     single=True)
    # 3.2 指定接收短信的手机号并指定发送给该接收人的短信中的参数值(在短信模板中定义的)
    cur_time = time.strftime('%H:%M:%S', time.localtime())  #变量内容不能太长
    direct_sms_attr1.add_receiver(receiver=tel)
    direct_sms_attr1.set_params({
        "machine": "短视频",
        "module": module,
        "time": cur_time,
        "message": message
    })

    #Step 5. 生成SMS消息对象
    msg1 = TopicMessage(msg_body1, direct_sms=direct_sms_attr1)

    re_msg = my_topic.publish_message(msg1)
    #print "Publish Message Succeed. MessageBody:%s MessageID:%s" % (msg_body1, re_msg.message_id)

    return 0
예제 #13
0
    def create_queue(self, broker):
        """
		根据broker类型,创建相应的queue对象
		"""
        if broker == 'redis':
            #创建redis queue
            from util import redis_queue
            queue = redis_queue.get_queue(settings.SUBSCRIBE_QUEUE_NAME)
        elif broker == 'mns':
            #创建aliyun mns queue
            self.mns_account = Account(\
             settings.MNS_ENDPOINT, \
             settings.MNS_ACCESS_KEY_ID, \
             settings.MNS_ACCESS_KEY_SECRET, \
             settings.MNS_SECURITY_TOKEN)

            queue = self.mns_account.get_queue(settings.SUBSCRIBE_QUEUE_NAME)
        else:
            queue = None

        return queue
예제 #14
0
def aliyunMsg(user, *args):
    code, product = args
    my_account = Account(Config.MNS_ENDPOINT, Config.MNS_ACCESSID,
                         Config.MNS_ACCESSKEY)
    my_topic = my_account.get_topic(Config.MNS_TOPIC)
    msg_body1 = "sms-message1."
    direct_sms_attr1 = DirectSMSInfo(free_sign_name=Config.MNS_SIGN,
                                     template_code=Config.MNS_TEMPLATE_CODE,
                                     single=True)
    direct_sms_attr1.add_receiver(receiver=user)
    direct_sms_attr1.set_params({"code": code, "product": product})
    msg1 = TopicMessage(msg_body1, direct_sms=direct_sms_attr1)
    try:
        re_msg = my_topic.publish_message(msg1)
        print "Publish Message Succeed. MessageBody:%s MessageID:%s" % (
            msg_body1, 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
예제 #15
0
def my_recv_msg():
    #从sample.cfg中读取基本配置信息
    ## WARNING: Please do not hard code your accessId and accesskey in next line.(more information: https://yq.aliyun.com/articles/55947)
    accid,acckey,endpoint,token = MNSSampleCommon.LoadConfig()

    #初始化 my_account, my_queue
    my_account = Account(endpoint, accid, acckey, token)
    queue_name = "MyQueue1"
    base64 = False if len(sys.argv) > 2 and sys.argv[2].lower() == "false" else True
    my_queue = my_account.get_queue(queue_name)
    my_queue.set_encoding(base64)


    #循环读取删除消息直到队列空
    #receive message请求使用long polling方式,通过wait_seconds指定长轮询时间为3秒

    ## long polling 解析:
    ### 当队列中有消息时,请求立即返回;
    ### 当队列中没有消息时,请求在MNS服务器端挂3秒钟,在这期间,有消息写入队列,请求会立即返回消息,3秒后,请求返回队列没有消息;

    wait_seconds = 3
    # print "%sReceive And Delete Message From Queue%s\nQueueName:%s\nWaitSeconds:%s\n" % (10*"=", 10*"=", queue_name, wait_seconds)
    #读取消息
    try:
        recv_msg = my_queue.receive_message(wait_seconds)
        # print "Receive Message Succeed! ReceiptHandle:%s MessageBody:%s MessageID:%s" % (recv_msg.receipt_handle, recv_msg.message_body, recv_msg.message_id)
    except MNSExceptionBase, e:
        if e.type == "QueueNotExist":
            print
            "Queue not exist, please create queue before receive message."
            sys.exit(0)
        elif e.type == "MessageNotExist":
            print
            "Queue is empty!"
            sys.exit(0)
        print
        "Receive Message Fail! Exception:%s\n" % e
        continue
예제 #16
0
def get_mns_client():
    mns_account = Account(common_settings.ENDPOINT, common_settings.ACCID,
                          common_settings.ACCKEY, common_settings.TOKEN)
    mns_client = mns_account.get_queue(common_settings.MNS_QUEUE)
    return mns_client
#DB_PASSWORD = "******"
DB_HOST = "47.95.232.88"
DB_USERNAME = "******"
DB_PASSWORD = "******"
DB_DATABASE = "greengrass"

# Read the basic configurations from sample.cfg
# WARNING: Please do not hard code your accessId and accesskey in next line.
# (more information: https://yq.aliyun.com/articles/55947)
accessKeyId, accesskeySecret, endpoint, token = MNSSampleCommon.LoadConfig()

# create the connect for IoT Kit
clt = client.AcsClient(accessKeyId, accesskeySecret, 'cn-shanghai')

# Init my_account, my_queue
my_account = Account(endpoint, accessKeyId, accesskeySecret, token)
queue_name = sys.argv[1] if len(sys.argv) > 1 else queueName
boolbase64 = False if len(
    sys.argv) > 2 and sys.argv[2].lower() == "false" else True
my_queue = my_account.get_queue(queue_name)
my_queue.set_encoding(boolbase64)

# get the connection to Amazon Greengrass RDS
db = MySQLdb.connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE)

# Read and delete the message from queue until the queue is empty
# receive message uses long polling mode, specify the long loop time to 3 second through wait_seconds

# long polling parsing
# Return the message when there are messages
# When queue is empty, request will wait for 3 second on server side.
예제 #18
0
파일: test.py 프로젝트: DjangSon/aliyun
# coding: utf-8
import sys
from mns.account import Account
from mns.topic import DirectSMSInfo, TopicMessage
from mns.mns_exception import MNSExceptionBase
accid = 'LTAIf6atnIup14AK'
acckey = 'zfoeCi2Au0le7vUbsFOmEVtPrtlfZf'
endpoint = 'http://1771999519197750.mns.cn-hangzhou.aliyuncs.com/'
topic_name = 'sms.topic-cn-hangzhou'
my_account = Account(endpoint, accid, acckey)
my_topic = my_account.get_topic(topic_name)
'''
Step 2. 设置SMS消息体(必须)
注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。
'''
msg_body1 = "sms-message1."
'''
Step 3. 生成SMS消息属性,single=False表示每个接收者参数不一样,
'''
# 3.1 设置SMSSignName和SMSTemplateCode
direct_sms_attr1 = DirectSMSInfo(free_sign_name='宁师生活网', template_code='SMS_69460049', single=False)
# 3.2 指定接收短信的手机号并指定发送给该接收人的短信中的参数值(在短信模板中定义的)
direct_sms_attr1.add_receiver(receiver='18150850025', params={'code': '123456'})
'''
#Step 5. 生成SMS消息对象
'''
msg1 = TopicMessage(msg_body1, direct_sms=direct_sms_attr1)
print(direct_sms_attr1.sms_params)
try:
    '''
    Step 6. 发布SMS消息
예제 #19
0
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)) + "/..")

import time
from sample_common import MNSSampleCommon
from mns.account import Account
from mns.topic import *

#从sample.cfg中读取基本配置信息
## WARNING: Please do not hard code your accessId and accesskey in next line.(more information: https://yq.aliyun.com/articles/55947)
accid, acckey, endpoint, token = MNSSampleCommon.LoadConfig()

#初始化 my_account, my_topic
my_account = Account(endpoint, accid, acckey, token)
topic_name = sys.argv[1] if len(sys.argv) > 1 else "MySampleTopic"
my_topic = my_account.get_topic(topic_name)

#创建主题, 具体属性请参考mns/topic.py中的TopicMeta结构
topic_meta = TopicMeta()
try:
    topic_url = my_topic.create(topic_meta)
    print("Create Topic Succeed! TopicName:%s\n" % topic_name)
except MNSExceptionBase, e:
    if e.type == "TopicAlreadyExist":
        print(
            "Topic already exist, please delete it before creating or use it directly."
        )
        sys.exit(0)
    print("Create Topic Fail! Exception:%s\n" % e)
예제 #20
0
        self.__tmp_access_key = response_body.get("MessageTokenDTO").get(
            "AccessKeySecret")
        self.__tmp_access_id = response_body.get("MessageTokenDTO").get(
            "AccessKeyId")
        self.__expire_time = response_body.get("MessageTokenDTO").get(
            "ExpireTime")
        self.__token = response_body.get("MessageTokenDTO").get(
            "SecurityToken")

        print "finsh refresh token..."


# 初始化 my_account, my_queue
token = Token()
token.refresh()
my_account = Account(endpoint, token.get_tmp_access_id(),
                     token.get_tmp_access_key(), token.get_token())
my_queue = my_account.get_queue(qname)
# my_queue.set_encoding(False)
# 循环读取删除消息直到队列空
# receive message请求使用long polling方式,通过wait_seconds指定长轮询时间为3秒

## long polling 解析:
### 当队列中有消息时,请求立即返回;
### 当队列中没有消息时,请求在MNS服务器端挂3秒钟,在这期间,有消息写入队列,请求会立即返回消息,3秒后,请求返回队列没有消息;

wait_seconds = 3
print "%sReceive And Delete Message From Queue%s\nQueueName:%s\nWaitSeconds:%s\n" % (
    10 * "=", 10 * "=", qname, wait_seconds)
while True:
    # 读取消息
    try:
예제 #21
0
#获取配置信息
## AccessKeyId      阿里云官网获取
## AccessKeySecret  阿里云官网获取
## Endpoint         阿里云消息和通知服务官网获取, Example: http://$AccountId.mns.cn-hangzhou.aliyuncs.com
## WARNING: Please do not hard code your accessId and accesskey in next line.(more information: https://yq.aliyun.com/articles/55947)
accessKeyId = parser.get("Base", "AccessKeyId")
accessKeySecret = parser.get("Base", "AccessKeySecret")
endpoint = parser.get("Base", "Endpoint")
securityToken = ""
if parser.has_option("Optional", "SecurityToken") and parser.get(
        "Optional", "SecurityToken") != "$SecurityToken":
    securityToken = parser.get("Optional", "SecurityToken")

#初始化my_account
my_account = Account(endpoint, accessKeyId, accessKeySecret, securityToken)

##############Queue 相关操作#####################
my_queue = my_account.get_queue(
    "MyQueue-%s" % time.strftime("%y%m%d-%H%M%S", time.localtime()))

#创建队列
## message被receive后,持续不可消费的时间   100秒
## message body的最大长度                   10240Byte
## message最长存活时间                      3600秒
## 新message可消费的默认延迟时间            10秒
## receive message时,长轮询时间            20秒
queue_meta = QueueMeta()
queue_meta.set_visibilitytimeout(100)
queue_meta.set_maximum_message_size(10240)
queue_meta.set_message_retention_period(3600)
예제 #22
0
    def handle(self, *args, **options):
        global _SERVICE_LIST

        # 准备访问MNS
        self.mns_account = Account(\
         settings.MNS_ENDPOINT, \
         settings.MNS_ACCESS_KEY_ID, \
         settings.MNS_ACCESS_KEY_SECRET, \
         settings.MNS_SECURITY_TOKEN)

        if hasattr(settings,
                   'MESSAGE_DEBUG_MODE') and settings.MESSAGE_DEBUG_MODE:
            import redis_queue
            queue = redis_queue.get_queue(settings.SUBSCRIBE_QUEUE_NAME)
            logging.info("queue mode:{}".format('redis'))
        else:
            queue = self.mns_account.get_queue(settings.SUBSCRIBE_QUEUE_NAME)
            logging.info("queue mode:{}".format('mns'))
        logging.info('queue: {}'.format(queue.get_attributes().queue_name))

        # TODO: 改成LongPoll更好
        while True:
            handler_func = None
            handle_success = False
            #读取消息
            try:
                recv_msg = queue.receive_message(WAIT_SECONDS)
                logging.info(
                    "Receive Message Succeed! ReceiptHandle:%s MessageBody:%s MessageID:%s"
                    % (recv_msg.receipt_handle, recv_msg.message_body,
                       recv_msg.message_id))

                # 处理消息(consume)
                data = json.loads(recv_msg.message_body)
                message_name = data['name']
                handler_func = handler_register.find_message_handler(
                    message_name)
                if handler_func:
                    try:
                        response = handler_func(data['data'], recv_msg)
                        logging.info("service response: {}".format(response))
                        handle_success = True

                        #只有正常才能删除消息,否则消息仍然在队列中
                        try:
                            time.sleep(3)
                            queue.delete_message(recv_msg.receipt_handle)
                            logging.debug(
                                "Delete Message Succeed!  ReceiptHandle:%s" %
                                recv_msg.receipt_handle)
                        except MNSExceptionBase, e:
                            logging.debug(
                                "Delete Message Fail! Exception:%s\n" % e)
                    except:
                        logging.info(u"Service Exception: {}".format(
                            unicode_full_stack()))
                else:
                    #TODO: 这里是否需要删除消息?
                    try:
                        queue.delete_message(recv_msg.receipt_handle)
                        logging.debug(
                            "Delete Message Succeed!  ReceiptHandle:%s" %
                            recv_msg.receipt_handle)
                    except MNSExceptionBase, e:
                        logging.debug("Delete Message Fail! Exception:%s\n" %
                                      e)
                    logging.info(u"Error: no such service found : {}".format(
                        message_name))

            except MNSExceptionBase as e:
                if e.type == "QueueNotExist":
                    logging.debug(
                        "Queue not exist, please create queue before receive message."
                    )
                    break
                elif e.type == "MessageNotExist":
                    logging.debug("Queue is empty! Waiting...")
                else:
                    logging.debug("Receive Message Fail! Exception:%s\n" % e)
                time.sleep(SLEEP_SECONDS)
                continue
            except Exception as e:
                print u"Exception: {}".format(unicode_full_stack())
            finally:
                if handler_func:
                    message = {
                        'message_id': recv_msg.message_id,
                        'message_body_md5': '',
                        'data': args,
                        'topic_name': '',
                        'msg_name': message_name,
                        'handel_success': handle_success
                    }
                    watchdog.info(message, log_type='MNS_RECEIVE_LOG')
        return
예제 #23
0
for sec, op in required_ops:
    if not parser.has_option(sec, op):
        sys.stderr.write("ERROR: need (%s, %s) in %s.\n" % (sec, op, cfgFN))
        sys.stderr.write("Read README to get help inforamtion.\n")
        sys.exit(1)

#获取配置信息
## AccessKeyId      阿里云官网获取
## AccessKeySecret  阿里云官网获取
## Endpoint         阿里云消息和通知服务官网获取, Example: http://$AccountId.mns.cn-hangzhou.aliyuncs.com
accessKeyId = parser.get("Base", "AccessKeyId")
accessKeySecret = parser.get("Base", "AccessKeySecret")
endpoint = parser.get("Base", "Endpoint")

#初始化my_account和my_queue
my_account = Account(endpoint, accessKeyId, accessKeySecret)
my_queue = my_account.get_queue(
    "MyQueue-%s" % time.strftime("%y%m%d-%H%M%S", time.localtime()))

#创建队列
## message被receive后,持续不可消费的时间   100秒
## message body的最大长度                   10240Byte
## message最长存活时间                      3600秒
## 新message可消费的默认延迟时间            10秒
## receive message时,长轮询时间            20秒
queue_meta = QueueMeta()
queue_meta.set_visibilitytimeout(100)
queue_meta.set_maximum_message_size(10240)
queue_meta.set_message_retention_period(3600)
queue_meta.set_delay_seconds(10)
queue_meta.set_polling_wait_seconds(20)
예제 #24
0
#! -*- coding: utf-8 -*-

import json
from mns.account import Account
from mns.mns_exception import MNSExceptionBase
from utils import post_slack

from config import QUEUE_NAME, END_POINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET

account = Account(END_POINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET)
queue = account.get_queue(QUEUE_NAME)


def run():
    while True:
        try:
            recv_msg = queue.receive_message(wait_seconds=10)
            message = json.loads(recv_msg.message_body)['message']
            print message
            if message['levelDescription'] == u'恢复正常':
                color = 'good'
            else:
                color = 'danger'
            post_slack(message['dimensions'], message['metricName'],
                       message['expression'], color)
            queue.delete_message(recv_msg.receipt_handle)
        except MNSExceptionBase, e:
            print e.message


if __name__ == '__main__':
예제 #25
0
    GPIO_clean()


if __name__ == '__main__':
    print "start deamon!"
    #init my_account, my_topic
    endpoint = "http://1402010103453031.mns.cn-hangzhou.aliyuncs.com/"
    access_id = "LTAIfpx57LeEmMKs"
    access_key = "nUqBzUFc48cTVIZh3mkpcnmosxvGTz"
    token = ""

    quit = Queue()
    dr = DryingRack()
    GPIO_init()
    #init my_account, my_topic
    my_account = Account(endpoint, access_id, access_key, token)
    # queue_name =  "control-queue"
    # my_queue = my_account.get_queue(queue_name)
    #Thread(target=control_thread,args=(my_account,)).start()

    #Thread(target=ioread_thread,args=(my_queue,)).start()
    Process(target=ioread_thread, args=(my_account, quit)).start()

    Process(target=control_thread, args=(my_account, quit)).start()
    #ioread_thread(my_account)

    while True:
        s = raw_input("type quit to quit:")
        if s == "quit":
            quiting = True
            quit.put("quit")
예제 #26
0
#coding:utf-8
import os
from flask import Flask, jsonify, request
from mns.account import Account
from mns.topic import DirectSMSInfo, TopicMessage, MNSExceptionBase

app = Flask(__name__)
account = Account(os.getenv('END_POINT'), os.getenv('ACCESS_ID'),
                  os.getenv('ACCESS_KEY'))
topic = account.get_topic(os.getenv('TOPIC'))
accessToken = os.getenv('ACCESS_TOKEN')


class InvalidUsage(Exception):
    status_code = 400

    def __init__(self, message, status_code=None, payload=None):
        Exception.__init__(self)
        self.message = message
        if status_code is not None:
            self.status_code = status_code
        self.payload = payload

    def to_dict(self):
        rv = dict(self.payload or ())
        rv['message'] = self.message
        return rv


@app.errorhandler(InvalidUsage)
def handle_invalid_usage(error):
예제 #27
0
# -*- coding: utf-8 -*-
#you can get $accountid from https://account.console.aliyun.com/#/secure
#you can get $accid and $acckey from https://ak-console.aliyun.com/#/accesskey
#you can generate $endpoint: http://$accountid.mns.cn-hangzhou.aliyuncs.com, eg. http://1234567890123456.mns.cn-hangzhou.aliyuncs.com
import sys
import time
from mns.account import Account
from mns.queue import *
from mns.topic import *
from mns.subscription import *
import ConfigParser

my_account = Account("http://1037980991456445.mns.cn-hangzhou.aliyuncs.com/", "LTAI1waLaAYoSvm7", "Lt4u9GsiTCn9RVE7ITCE7crestypvH")
topic_name = "sms.topic-cn-hangzhou"
my_topic = my_account.get_topic(topic_name)
#attributes for Mail
#direct_mail = DirectMailInfo(account_name="*****@*****.**", subject="TestMailSubject", address_type=0, is_html=0, reply_to_address=0)
#attributes for SMS
#linename="Tom"
#devicename="001"
#message="duanlu"
def send_msg(phone,linename,devicename,message):
    direct_sms_attr1 = DirectSMSInfo(free_sign_name="故指通知", template_code="SMS_51620020", single=False)
    phonenumber=phone.split(',')
    number=len(phonenumber)
    while(number!=0):
        number-=1
        direct_sms_attr1.add_receiver(receiver=str(phonenumber[number]), params={"linename": str(linename) ,"devicename": str(devicename) ,"message": str(message) })
    #direct_sms.add_receiver(receiver="$phone2", params={"name": "David"})
    #init TopicMessage
    msg_body = "I am test message."
예제 #28
0
 def __init__(self):
     super(ResumeExchange, self).__init__()
     self.mns_account = Account(MNS_ENDPOINT, MNS_ACCID, MNS_ACCKEY,
                                MNS_TOKEN)
     self.mns_client = self.mns_account.get_queue(MNS_QUEUE)
예제 #29
0
import time
from mns.account import Account
from mns.queue import *
from mns.topic import *
from mns.subscription import *
import ConfigParser

#获取配置信息
accessKeyId =  ""
accessKeySecret =  ""
endpoint = " "
securityToken = ""


#初始化my_account
my_account = Account("", "", "")
my_queue = my_account.get_queue("MyQueue-%s" % time.strftime("%y%m%d-%H%M%S", time.localtime()))
my_topic = my_account.get_topic("sms.topic-cn-shanghai")

'''
天气查询
'''
reload(sys)
sys.setdefaultencoding('utf-8')

#查询城市ID
baseurl = 'https://free-api.heweather.com/v5/'
ikey = '1be15036695c4206b949a3c1ffc7ce72'

print ("Please tell us city name")
city_n = raw_input("Enter your city nmae: ")
예제 #30
0
 def __init__(self):
     # initialize my_account, my_queue
     my_account = Account(settings.ALIYUN_MNS_END_POINT,
                          settings.ALIYUN_MNS_ACCESS_KEY_ID,
                          settings.ALIYUN_MNS_ACCESS_KEY_SECRET, "")
     self.my_queue = my_account.get_queue(settings.ALIYUN_MNS_QUEUE_NAME)