zoukankan      html  css  js  c++  java
  • 阿里云MNS消息服务quene方式发送数据流程图

    转载于:http://www.architecy.com/archives/483

    阿里mns支持普通服务的消息服务,也就是对数据量较小的服务。

    MNS支持两种操作类型,队列和主题,也可以是队列和主题的柔和

    下面是前期使用测试的一个流程图,具体使用的是对列和主题的结合

    pom.xml

            <!-- 阿里mns 客户端 -->
            <dependency>
                <groupId>com.aliyun.mns</groupId>
                <artifactId>aliyun-sdk-mns</artifactId>
                <version>1.1.8</version>
                <classifier>jar-with-dependencies</classifier>
            </dependency>

    application-local.yml

    #mns配置
    auth:
      mns:
        id: LTAI9auC0WRljjTjabdjdojg
        secret: Xr3PkMWR55xvZ9Mrk4fIYPyWjnAajZdddggd
        endpoint: http://31373024.mns.cn-beijing.aliyuncs.com/
        connectTime: 3000
        socketTime: 3000

    MnsConfig.java

    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.stereotype.Component;
    
    
    @Data
    @Component
    @RefreshScope
    @ConfigurationProperties(prefix = "auth.mns")
    public class MnsConfig {
    
        private String id;
    
        private String secret;
    
        private String endpoint;
    
        private int connectTime;
    
        private int socketTime;
    }

    MnsTopic.java

    import com.aliyun.mns.client.CloudAccount;
    import com.aliyun.mns.client.CloudTopic;
    import com.aliyun.mns.client.MNSClient;
    import com.aliyun.mns.common.ClientException;
    import com.aliyun.mns.common.ServiceException;
    import com.aliyun.mns.common.http.ClientConfiguration;
    import com.aliyun.mns.model.TopicMessage;
    import javafx.util.Pair;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    
    @RefreshScope
    @Component
    public class MnsTopic {
        private static Logger logger = LoggerFactory.getLogger(MnsTopic.class);
    
        private static final String TOPIC_NAME = "test-dev";
        /** success */
        private static final int RESULT_SUCCESS = 0;
    
        private static final int RESULT_FAIL = -1;
    
        private MNSClient client;
    
        @Autowired
        private MnsConfig mnsConfig;
    
    
    
    
        @PostConstruct
        public void init(){
            ClientConfiguration configuration = new ClientConfiguration();
            configuration.setConnectionTimeout(mnsConfig.getConnectTime());
            configuration.setSocketTimeout(mnsConfig.getSocketTime());
            logger.info("MnsTopic init  endpoint={}", mnsConfig.getEndpoint());
            logger.info("MnsTopic init  id={}", mnsConfig.getId());
            logger.info("MnsTopic init  secret={}", mnsConfig.getSecret());
            CloudAccount account = new CloudAccount(
                    mnsConfig.getId(),
                    mnsConfig.getSecret(),
                    mnsConfig.getEndpoint(), configuration);
            client = account.getMNSClient();
        }
    
        /**
         * 消息生产逻辑
         *
         * @param message
         * @return <code,msg>; code:0成功-1失败; msg:成功为messageId失败为失败原因
         */
        public Pair<Integer, String> publish(TopicMessage message) {
            String msg = "";
            int code = RESULT_FAIL;
            do {
                if (message == null) {
                    msg = "msg is null";
                    break;
                }
                String body = message.getMessageBody();
                if (body == null || body.trim().length() == 0) {
                    msg = "msg's body is empty";
                    break;
                }
                try {
                    CloudTopic topic = client.getTopicRef(TOPIC_NAME);
                    TopicMessage result = topic.publishMessage(message);
                    code = RESULT_SUCCESS;
                    msg = result.getMessageId();
                } catch (ClientException ce) {
                    msg = "mns client exception : " + ce.toString();
                } catch (ServiceException se) {
                    msg = "mns server exception : " + se.toString();
                } catch (Exception e) {
                    msg = "mns unknown exception happened!: " + e.getMessage();
                } finally {
                    break;
                }
            } while (true);
            if (logger.isDebugEnabled()){
                logger.debug("MnsTopic.publish()|{}|{}", code, msg);
            }
            return new Pair<>(code, msg);
        }
    
        public static void main(String[] args) {
    
            TopicMessage message = new TopicMessage() {
                @Override
                public String getMessageBody() {
                    return "要发送的消息内容";
                }
            };
            MnsTopic mnsTopic = new MnsTopic();
            mnsTopic.publish(message);
        }
    }

    结束。

  • 相关阅读:
    1
    可测试性
    爬取信件信息(更新)
    爬虫爬取疫情数据存到文件
    python分析三国演义中出现次数最多的词作词频统计
    实验三
    scala统计学生成绩
    对于OpenCV的访问Mat元素的探究
    OpenCV+VS2017+Nivdia(待更新)
    Window10 CUDA和cunn安装
  • 原文地址:https://www.cnblogs.com/it-deepinmind/p/12740101.html
Copyright © 2011-2022 走看看