阿里云RocketMQ的生产者简单实现
// MQ的应用场景有比如 订单变更消息可以通过产生这个事件的地方(比如前端调用后端的接口post一个订单,那么就是在这个mapping方法里做一个生产者【不过最好通过aop来实现,不然n多个接口都要写生产者代码】,
// 将客户端发来的订单消息存入MQ里,然后相关的服务【比如需要通知后台管理人员,那么通知后台管理人员的service肯定是一个consumer来消费该消息,不过的组的消费者是可以多次消费该消息的,这符合现实逻辑,我有一个消息
// 需要让多个部门知道,那么这个部门其实就是消费组,但是一个组里只有一个consumer消费该消息】会处理这条消息(比如入库/调用相关接口啥的)
// 注意,消息发送给消息队列后,如果没有任何消费组有消费过,那么这条消息会被保存直到被至少一个消费组消费;已经消费的消息正常情况下不会再被消费;
package com.test.eee; import com.aliyun.openservices.ons.api.*; import java.util.Date;
import java.util.Properties;
import java.util.Scanner; /**
* 阿里云RocketMQ Producer简单实现
*/
public class MQTestProducer { public static void main(String[] args) {
Properties properties = new Properties();
// GROUP_ID其实就是网上文章里的GroupName,对于RocketMQ而言一条消息会分发给所有的订阅了此消息(topic/tag)的group
// 但是一个group里的consumer只有一个会得到这条消息
// TODO 经过测试阿里云上的RocketMQ可以不设置组
//properties.setProperty(PropertyKeyConst.GROUP_ID, "GID_CONSUMER_EEE");
// AccessKey 阿里云身份验证,在阿里云服务器管理控制台创建
properties.put(PropertyKeyConst.AccessKey, "sss");
// SecretKey 阿里云身份验证,在阿里云服务器管理控制台创建
properties.put(PropertyKeyConst.SecretKey, "bbb");
//设置发送超时时间,单位毫秒
properties.setProperty(PropertyKeyConst.SendMsgTimeoutMillis, "3000");
// 设置 TCP 接入域名,到控制台的实例基本信息中查看
properties.put(PropertyKeyConst.NAMESRV_ADDR,
"http://wwws.mq-internet-access.mq-internet.aliyuncs.com:80"); Producer producer = ONSFactory.createProducer(properties);
// 在发送消息前,必须调用 start 方法来启动 Producer,只需调用一次即可
producer.start(); //循环发送消息
//for (int i = 0; i < 100; i++) {
Message msg = new Message(
// Message 所属的 Topic
"sss-change",
// TODO Topic表示某种业务的类型,而Tag则是对这种业务的具体的划分
// 比如消息类型是保存的是微信消息,那么可以分为好友消息/群组消息/小程序消息等等Tag
"TagA",
// Message Body 可以是任何二进制形式的数据, MQ 不做任何干预,
// 需要 Producer 与 Consumer 协商好一致的序列化和反序列化方式
"Hello 中文拉拉".getBytes()); // 设置代表消息的业务关键属性,请尽可能全局唯一。
// 以方便您在无法正常收到消息情况下,可通过阿里云服务器管理控制台查询消息并补发
// 注意:不设置也不会影响消息正常收发
// TODO 这个key就是比Tag更加精确的标识,一般设置为整个Topic里的消息唯一标识
//msg.setKey("ORDERID_" + i); try {
SendResult sendResult = producer.send(msg);
// 同步发送消息,只要不抛异常就是成功
// TODO 发送的每条消息在RocketMQ里都有一个唯一的MessageId
if (sendResult != null) {
System.out.println(new Date() + " Send mq message success. Topic is:" + msg.getTopic() + " msgId is: " + sendResult.getMessageId());
}
} catch (Exception e) {
// 消息发送失败,需要进行重试处理,可重新发送这条消息或持久化这条数据进行补偿处理
System.out.println(new Date() + " Send mq message failed. Topic is:" + msg.getTopic());
e.printStackTrace();
}
// } var scanner = new Scanner(System.in);
scanner.next();
System.out.println("closed producer conn.");
// 在应用退出前,销毁 Producer 对象
// 注意:如果不销毁也没有问题
producer.shutdown();
}
}
如果是要结合Spring,则可以用ProducerBean代替Producer
@Bean(initMethod = "start", destroyMethod = "shutdown")
public ProducerBean xxxProducer() {
return this.getProducer(gid);
} private ProducerBean getProducer(String gid) {
Properties properties = new Properties();
properties.setProperty("addr", nameSrvAddr);
properties.setProperty("AccessKey", accessKey);
properties.setProperty("SecretKey", secretKey);
// 对于producer可以不要gid
//properties.setProperty("GROUP_ID", gid); ProducerBean producer = new ProducerBean();
producer.setProperties(properties);
return producer;
} 用的时候就是用过这个bean.send(new Message(...))来实现发送
阿里云RocketMQ的生产者简单实现的更多相关文章
- 阿里云RocketMQ的消费者简单实现
业务场景之类的请看另一篇生产者的实现: package com.ttt.eee; import com.aliyun.openservices.ons.api.Action; import com.a ...
- [原创]阿里云RocketMQ踩过的哪些坑
由于公司的最近开始使用RocketMQ来做支付业务处理, 便开启了学习阿里云RocketMQ的学习与实践之路, 其中踩了不少的坑, 大部份是由于没有仔细查看阿里云的技术文档而踩的坑. 但是有一个非常大 ...
- 阿里云RocketMQ定时/延迟消息队列实现
新的阅读体验:http://www.zhouhong.icu/post/157 一.业务需求 需要实现一个提前二十分钟通知用户去做某件事的一个业务,拿到这个业务首先想到的最简单得方法就是使用Redis ...
- 阿里云api调用做简单的cmdb
阿里云api调用做简单的cmdb 1 步骤 事实上就是调用阿里api.获取可用区,比方cn-hangzhou啊等等.然后在每一个区调用api 取ecs的状态信息,最好写到一个excel里面去.方便排序 ...
- Spring boot实战项目整合阿里云RocketMQ (非开源版)消息队列实现发送普通消息,延时消息 --附代码
一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿 ...
- 阿里云OSS对象存储 简单上传文件
不得不说阿里云的命名比较让人摸不着头脑,开始以为是文件存储NAS,弄了半天什么文件系统,挂载点的搞不明白.后来才搞清楚原来 对象存储OSS才是我需要的. 其中EndPoint就是画红框的部分,但是要加 ...
- CentOS7 配置阿里云yum源,非常之简单
1.进入yum的文件夹 命令:cd /etc/yum.repos.d/ 2.下载wget 命令:yum -y install wget 命令:yum install bash-completion ...
- 【工具】OSS阿里云存储服务--超级简单--个人还是觉得Fastdfs好玩
介绍 阿里云对象存储服务(Object Storage Service,简称 OSS)为您提供基于网络的数据存取服务. 使用 OSS,您可以通过网络随时存储和调用包括文本.图片.音频和视频等在内的各种 ...
- Docker 部署阿里云RocketMQ 4.5.1
搜索镜像 docker search rocketmq 查看镜像版本 如果要查看其它的镜像,只需要将其中的镜像名称foxiswho/rocketmq替换为其它镜像即可 curl https://reg ...
随机推荐
- 2.设计模式-Abstract Factory 抽象工厂模式
大神勿喷,不对的地方请指出来,学笔记而已. 解决的问题:应对多系列对象构建的变化或多系列(例如:崎岖的山路和平坦的马路属于一个系列) 不断的变化的创建. 使用场景:对象不变(比如有3个对象 " ...
- (转)Redis Cluster(集群)
一.概述 在前面的文章中介绍过了redis的主从和哨兵两种集群方案,redis从3.0版本开始引入了redis-cluster(集群).从主从-哨兵-集群可以看到redis的不断完善:主从复制是最简单 ...
- Python里面match()和search()的区别?
答:re模块中match(pattern,string[,flags]),检查string的开头是否与pattern匹配. re模块中research(pattern,string[,flags]), ...
- docker安装ubuntu以后无ifconfig命令解决办法
解决: 1.apt-get update 2.apt install net-tools #ifcongig 3.apt install iputils-ping # ping
- MapReduce 基本优化相关参数
MapReduce优化优化(1)资源相关参数:以下参数是在自己的 MapReduce 应用程序中配置就可以生效 mapreduce.map.memory.mb: 一个 Map Task 可使用的内存上 ...
- Linux的MySQL安装和配置(详细)
打开centos系统 输入root用户和密码(我的用户和密码都是root) 查看有没有安装mysql rpm -qa|grep mysql 没有返回任何信息说明没有安装 我是用的centos7,默认安 ...
- NOIP提高组历年真题题解
2018 铺设道路 差分水题,推一下结论就好了. #include<cstdio> #include<algorithm> using namespace std; ],d[] ...
- Docker:Docker Compose 详解
Docker Compose 概述与安装? 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架 ...
- ubuntu video and audio
推荐你直接安装ubuntu-studio系统.里面有默认安装了很多多媒体软件,主要集中在4个方面1.音频编辑:Jack, Ardour, Audacity, Qtractor. Hydrogen, Y ...
- 2018-2019-2 网络对抗技术 20165231 Exp9 Web安全基础
实验内容 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分.包括(SQL,XSS,CSRF).Webgoat实践下相关实验. 实验过程 WebGoat: Webgoat是OWA ...