阿里云 消息队列mq
使用阿里云消息队列
控制台地址:http://ons.console.aliyun.com/#/home/topic
Demo:
支付消息mq工厂类:
public class DfacePayConsumerFactory {
public static String CID = "CID-";
//监听执行实例
@Autowired
private DfacePayConsumerListener dfacePayConsumerListener;
private String topic;
private String pTag;
private String accessKey;
private String secretKey;
private String tag;
private Consumer consumer;
/**
* @return the topic
*/
public String getTopic() {
return topic;
}
/**
* @param topic the topic to set
*/
public void setTopic(String topic) {
this.topic = topic;
}
/**
* @return the tag
*/
public String getTag() {
return tag;
}
/**
* @param tag the tag to set
*/
public void setTag(String tag) {
this.tag = tag;
}
/**
* @return the pTag
*/
public String getpTag() {
return pTag;
}
/**
* @param pTag the pTag to set
*/
public void setpTag(String pTag) {
this.pTag = pTag;
}
/**
* @return the accessKey
*/
public String getAccessKey() {
return accessKey;
}
/**
* @param accessKey the accessKey to set
*/
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
/**
* @return the secretKey
*/
public String getSecretKey() {
return secretKey;
}
/**
* @param secretKey the secretKey to set
*/
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public void initConsumer() {
Properties properties = new Properties();
String consumerId = CID + this.topic
+ (StringUtils.hasText(this.pTag) ? "-" + this.pTag : "");
properties.put(PropertyKeyConst.ConsumerId, consumerId);
properties.put(PropertyKeyConst.AccessKey, this.accessKey);
properties.put(PropertyKeyConst.SecretKey, this.secretKey);
/**
(
//相关属性介绍:
//Properties properties = new Properties();
//properties.put(PropertyKeyConst.ConsumerId, consumerLocal.getConsumerId());
// AccessKey 阿里云身份验证,在阿里云服务器管理控制台创建
//properties.put(PropertyKeyConst.AccessKey, consumerLocal.getAccessKey());
// SecretKey 阿里云身份验证,在阿里云服务器管理控制台创建
//properties.put(PropertyKeyConst.SecretKey, consumerLocal.getSecreKey());
//消息处理失败后多久重新发送消息
properties.put(PropertyKeyConst.SuspendTimeMillis, consumerLocal.getSuspendTimeMillis());
//重发的次数
//properties.put(PropertyKeyConst.MaxReconsumeTimes, consumerLocal.getMaxReconsumeTimes());
//消费者的线程数
//properties.put(PropertyKeyConst.ConsumeThreadNums,"1");
//消费者的介入地址
//properties.put(PropertyKeyConst.ONSAddr, consumerLocal.getOnsAddress());
)
**/
consumer = ONSFactory.createConsumer(properties);
consumer.subscribe(topic, tag, this.dfacePayConsumerListener);
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(90000);
} catch (InterruptedException e) {
e.printStackTrace();
}
consumer.start();
}
}).start();
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
shutDown();
}
});
}
/**
* 停止监听
*
* @return
*/
public boolean shutDown() {
if (null != this.consumer) {
this.consumer.shutdown();
return true;
}
return false;
}
}
//dPay支付监听 执行mq consume消息接收(通过topic订阅)
@Component("dfacePayConsumerListener")
public class DfacePayConsumerListener implements MessageListener {
private static Logger logger = LoggerFactory.getLogger(DfacePayConsumerListener.class); @Autowired
private ...; @Override
public Action consume(Message message, ConsumeContext context) {
String msg = new String(message.getBody());
String tag = message.getTag();
logger.info(LogUtils.builder().append("mq", "接受mq").append("mqTag", tag)
.append("mqMsg", msg).toString());
return tagHandle(tag, msg, message);
} public Action tagHandle(String tag, String msg, Message message) {
if (MqTagEnum.PAY.name().equals(tag)) {
try {
PayBackBo payBackBo = JSON.parse(msg, PayBackBo.class);
//检查订单号
if (!payBackBo.getOrderNo().startsWith(ApplicationConstant.APP_NO)) {
logger.info(LogUtils.format("订单支付失败: orderNo 前缀 ", payBackBo.getOrderNo()));
return Action.CommitMessage;
}
return giftOrderHandle(payBackBo);
} catch (Exception e) {
e.printStackTrace();
logger.info(LogUtils.format("paid_error", e.getMessage()));
return Action.ReconsumeLater;
}
} else {
logger.info(LogUtils.builder().append("tag error", tag).append("msg", msg)
.append("message", message).toString());
}
return Action.CommitMessage;
} /**
* 支付订单处理
*
* @param payBackBo
* @return
*/
private Action giftOrderHandle(PayBackBo payBackBo) {
//处理支付业务逻辑
} }
阿里云 消息队列mq的更多相关文章
- 使用java实现阿里云消息队列简单封装
一.前言 最近公司有使用阿里云消息队列的需求,为了更加方便使用,本人用了几天时间将消息队列封装成api调用方式以方便内部系统的调用,现在已经完成,特此记录其中过程和使用到的相关技术,与君共勉. 现在阿 ...
- Sping Boot入门到实战之实战篇(一):实现自定义Spring Boot Starter——阿里云消息队列服务Starter
在 Sping Boot入门到实战之入门篇(四):Spring Boot自动化配置 这篇中,我们知道Spring Boot自动化配置的实现,主要由如下几部分完成: @EnableAutoConfigu ...
- 阿里云消息队列(MQ)服务
A.首先在阿里云上申请消息队列MQ服务: B.然后创建一个Topic(主题,一级主题):然后创建生产者与消费者: C.不过此时还没有结束 ,还需要创建一个AccessKey和AccessSecret( ...
- 阿里云消息队列MQ_HTTP接入 for .NetCore 简单例子
, , )).TotalMilliseconds; , , )).TotalMilliseconds; ) ...
- 阿里云消息队列的C#使用http接口发送消息实例
app.config <appSettings> <clear/> <add key="Ons_Topic" value="XXX_Fini ...
- 消息队列 MQ 入门理解
功能特性: 应用场景: 消息队列 MQ 可应用于如下几个场景: 分布式事务 在传统的事务处理中,多个系统之间的交互耦合到一个事务中,响应时间长,影响系统可用性.引入分布式事务消息,交易系统和消息队列之 ...
- 详解RPC远程调用和消息队列MQ的区别
PC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制. RPC框架 知名度较高的有Thrift(FB的).dubbo(阿里的). RP ...
- 消息队列MQ简介
项目中要用到RabbitMQ,领导让我先了解一下.在之前的公司中,用到过消息队列MQ,阿里的那款RocketMQ,当时公司也做了简单的技术分享,自己也看了一些博客.自己在有道云笔记上,做了一些整理,但 ...
- 为什么会需要消息队列(MQ)?
为什么会需要消息队列(MQ)? #################################################################################### ...
随机推荐
- javascript的继承模式
在javascript里面看到javascript的继承模式和传统的继承模式是有区别的,就想查资料看一下到底有区别,就看到了这篇文章,觉得讲得还可以,暂时先放上来,以后有别的东西再补充: http:/ ...
- idea 2019.1.3最新注册码
CATF44LT7C-eyJsaWNlbnNlSWQiOiJDQVRGNDRMVDdDIiwibGljZW5zZWVOYW1lIjoiVmxhZGlzbGF2IEtvdmFsZW5rbyIsImFzc ...
- python 子类继承父类__init__(转载)
转载: http://www.jb51.net/article/100195.htm 前言 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法 ...
- shell命令结果重定向
- Intellij 选择profile
注意有3个地方需要改
- 一、小程序内嵌Html示例
小程序内嵌Html 1.下载wxParse:https://github.com/icindy/wxParse 2.下载完成后将插件目录下的wxParse文件夹拷贝到项目目录下 (文件夹明细) 3.全 ...
- 一、Api
一. private static readonly IList<string> BaseParamKey = new List<string>() { "apiId ...
- 【LeetCode】智商题 brainteaser(共3题)
[292]Nim Game [319]Bulb Switcher [777]Swap Adjacent in LR String (2019年2月13日,谷歌tag) 给了两个字符串start 和en ...
- Sass函数-Miscellaneous函数(三元条件函数)
在这里把 Miscellaneous 函数称为三元条件函数,主要因为他和 JavaScript 中的三元判断非常的相似.他有两个值,当条件成立返回一种值,当条件不成立时返回另一种值: if($cond ...
- Hibernate 一对多配置 级联操作(级联失败问题分析解决)
一方: package com.xdfstar.domain; import java.io.Serializable;import java.util.Date;import java.util.H ...