// 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的生产者简单实现的更多相关文章

  1. 阿里云RocketMQ的消费者简单实现

    业务场景之类的请看另一篇生产者的实现: package com.ttt.eee; import com.aliyun.openservices.ons.api.Action; import com.a ...

  2. [原创]阿里云RocketMQ踩过的哪些坑

    由于公司的最近开始使用RocketMQ来做支付业务处理, 便开启了学习阿里云RocketMQ的学习与实践之路, 其中踩了不少的坑, 大部份是由于没有仔细查看阿里云的技术文档而踩的坑. 但是有一个非常大 ...

  3. 阿里云RocketMQ定时/延迟消息队列实现

    新的阅读体验:http://www.zhouhong.icu/post/157 一.业务需求 需要实现一个提前二十分钟通知用户去做某件事的一个业务,拿到这个业务首先想到的最简单得方法就是使用Redis ...

  4. 阿里云api调用做简单的cmdb

    阿里云api调用做简单的cmdb 1 步骤 事实上就是调用阿里api.获取可用区,比方cn-hangzhou啊等等.然后在每一个区调用api 取ecs的状态信息,最好写到一个excel里面去.方便排序 ...

  5. Spring boot实战项目整合阿里云RocketMQ (非开源版)消息队列实现发送普通消息,延时消息 --附代码

    一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿 ...

  6. 阿里云OSS对象存储 简单上传文件

    不得不说阿里云的命名比较让人摸不着头脑,开始以为是文件存储NAS,弄了半天什么文件系统,挂载点的搞不明白.后来才搞清楚原来 对象存储OSS才是我需要的. 其中EndPoint就是画红框的部分,但是要加 ...

  7. CentOS7 配置阿里云yum源,非常之简单

    1.进入yum的文件夹 命令:cd   /etc/yum.repos.d/ 2.下载wget 命令:yum -y install wget 命令:yum install bash-completion ...

  8. 【工具】OSS阿里云存储服务--超级简单--个人还是觉得Fastdfs好玩

    介绍 阿里云对象存储服务(Object Storage Service,简称 OSS)为您提供基于网络的数据存取服务. 使用 OSS,您可以通过网络随时存储和调用包括文本.图片.音频和视频等在内的各种 ...

  9. Docker 部署阿里云RocketMQ 4.5.1

    搜索镜像 docker search rocketmq 查看镜像版本 如果要查看其它的镜像,只需要将其中的镜像名称foxiswho/rocketmq替换为其它镜像即可 curl https://reg ...

随机推荐

  1. express中的中间件(middleware)、自定义中间件、静态文件中间件、路由中间件

    express文档地址 什么是中间件呢(middleware)?它是谁的中间件呢? 首先我们需要了解到请求和响应, 请求就是客户端发送请求给服务器, 响应就是,服务器根据客户端的请求返回给客户端的数据 ...

  2. Java 面向对象(六)

    抽象类和抽象方法 抽象方法 在方法前面添加了一个关键字 abstract 抽象方法的特点 (1)抽象方法是没有方法体的. (2)抽象方法必须得要定义在抽象类 或 接口当中 (在类前面添加上了一个abs ...

  3. 网页表格导入导出Excel

    用JS实现网页表格数据导入导出excel. 首先是JS文件中的代码 (function($){ function getRows(target){ var state = $(target).data ...

  4. SDK/JDK,Shell/Shell脚本,Apache/APR ,MTK

    SDK 软件开发工具包(SoftwareDevelopmentKit) API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用 ...

  5. sql data compare

    https://documentation.red-gate.com/sdc14 About SQL Data Compare With SQL Data Compare, you can compa ...

  6. python3.6+pycharm+robotframework 环境搭建

    参考文档:https://www.cnblogs.com/chenyuebai/p/8359577.html, https://www.cnblogs.com/jiyanjiao-702521/p/9 ...

  7. ISO/IEC 9899:2011 条款6.2.4——对象的存储持久性

    6.2.4 对象的存储持久性 1.一个对象具有一个存储持久性来确定其生命周期.一共有四种存储持久性:静态的,线程的,自动的,以及分配的.分配存储在7.22.3中描述. 2.一个对象的生命周期是程序执行 ...

  8. 005-多线程-集合-Map-ConcurrentSkipListMap

    一.概述 ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景. ConcurrentSkipListMap和TreeMap,它们虽然都是有序的哈希表.但是,第一,它 ...

  9. Oracle查看表结构的方法【我】

    Oracle查看表结构的方法   方法一: 在命令窗口下输入   DESC table_name;  回车       方法二: 在sql窗口下   SELECT DBMS_METADATA.GET_ ...

  10. LVS的调度算法介绍

    1.轮询调度(rr) 轮询调度(Round Robin 简称'RR')算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单.轮询算法假设所有的服务器处理请求的能力都一样的, ...