springBOOT集成阿里云MQ-AMQP
序:
MQ的优势就不做介绍了可以自行百度,前篇写了springboot集成本地搭建的rabbitmq组建,但是项目最后部署打算还是直接使用阿里云的AMQP,阿里云AMQP是直接可以兼容rabbitmq并且在集成的时候 rabbitmq 是通过用户密码等配置做集成而阿里云先调用阿里动态生产的密钥做链接更加安全后台也更完善。
- POM:
在POM中引入
<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.5.0</version></dependency><dependency><groupId>com.alibaba.mq-amqp</groupId><artifactId>mq-amqp-client</artifactId><version>1.0.5</version></dependency>
- 阿里密钥类:
import com.alibaba.mq.amqp.utils.UserUtils;
import com.rabbitmq.client.impl.CredentialsProvider;
import org.apache.commons.lang3.StringUtils;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;/*** 阿里云 UserName、Password 生成类(动态变化)*/
public class AliyunCredentialsProvider implements CredentialsProvider {/*** Access Key ID.*/private final String accessKeyId;/*** Access Key Secret.*/private final String accessKeySecret;/*** security temp token. (optional)*/private final String securityToken;/*** 实例 id(从阿里云 AMQP 版控制台获取)*/private final String instanceId;public AliyunCredentialsProvider(final String accessKeyId, final String accessKeySecret,final String instanceId) {this(accessKeyId, accessKeySecret, null, instanceId);}public AliyunCredentialsProvider(final String accessKeyId, final String accessKeySecret,final String securityToken, final String instanceId) {this.accessKeyId = accessKeyId;this.accessKeySecret = accessKeySecret;this.securityToken = securityToken;this.instanceId = instanceId;}@Overridepublic String getUsername() {if(StringUtils.isNotEmpty(securityToken)) {return UserUtils.getUserName(accessKeyId, instanceId, securityToken);} else {return UserUtils.getUserName(accessKeyId, instanceId);}}@Overridepublic String getPassword() {try {return UserUtils.getPassord(accessKeySecret);} catch (InvalidKeyException e) {//todo} catch (NoSuchAlgorithmException e) {//todo}return null;}
}
- 生产者:
import com.rabbitmq.client.*;
import com.yibaijin.yibaijin.service.sender.service.MessageSenderService;
import com.yibaijin.yibaijin.service.util.ConfigUtil;
import com.yibaijin.yibaijin.service.util.JsonTool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.concurrent.TimeoutException;
public void MqSender(String uuid,HashMap<String,String> message) throws IOException, TimeoutException{ConnectionFactory factory = new ConnectionFactory();// 设置接入点,到控制台概览页面上查看获取factory.setHost("×××××.aliyuncs.com");factory.setCredentialsProvider(new AliyunCredentialsProvider("×××××", "×××××", "amqp-cn-×××××"));factory.setAutomaticRecoveryEnabled(true);factory.setNetworkRecoveryInterval(5000);// 设置 Vhost 名称,请确保已在控制台上创建完成factory.setVirtualHost();// 默认端口,非加密端口 5672,加密端口 5671factory.setPort(5672);//基于网络环境合理设置超时时间factory.setConnectionTimeout(30 * 1000);factory.setHandshakeTimeout(30 * 1000);factory.setShutdownTimeout(0);Connection connection = factory.newConnection();Channel channel = connection.createChannel();AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().messageId(uuid).build();channel.basicPublish("×××××", "×××××", true, props,message.toString().getBytes(StandardCharsets.UTF_8));connection.close();}
- 消费者:
public static void aaa() throws IOException, TimeoutException, NoSuchAlgorithmException, InvalidKeyException {long timestamp = System.currentTimeMillis();ConnectionFactory factory = new ConnectionFactory();// 设置接入点,到控制台概览页面上查看获取factory.setHost("×××××.aliyuncs.com");// ${instanceId} 为实例 ID,从阿里云 AMQP 版控制台获取// ${AccessKey} 阿里云身份验证,在阿里云服务器管理控制台创建// ${SecretKey} 阿里云身份验证,在阿里云服务器管理控制台创建//一定要这个才能自动恢复factory.setCredentialsProvider(new AliyunCredentialsProvider("×××××", "×××××", "×××××"));factory.setAutomaticRecoveryEnabled(true);factory.setNetworkRecoveryInterval(5000);// 设置 Vhost 名称,请确保已在控制台上创建完成factory.setVirtualHost();// 固定端口factory.setPort(5672);factory.setConnectionTimeout(300 * 1000);factory.setHandshakeTimeout(300 * 1000);factory.setShutdownTimeout(0);Connection connection = factory.newConnection();final Channel channel = connection.createChannel();// 创建 ${ExchangeName},该 Exchange 必须在控制台上已存在,并且 Exchange 的类型与控制台上的类型一致// AMQP.Exchange.DeclareOk exchangeDeclareOk = channel.exchangeDeclare("exchangeTest", "direct", true, false, false, null);// 创建 ${QueueName} ,该 Queue 必须在控制台上已存在// AMQP.Queue.DeclareOk queueDeclareOk = channel.queueDeclare("queue_one_key1", false, false, false, new HashMap<String, Object>());// Queue 与 Exchange 进行绑定,并确认绑定的 BindingKeyTest// AMQP.Queue.BindOk bindOk = channel.queueBind("queue_one_key1", "exchangeTest", "N4yk063g");// 开始消费消息channel.basicConsume("×××××", false, "×××××", new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope,AMQP.BasicProperties properties, byte[] body)throws IOException {//接收到的消息,进行业务逻辑处理System.out.println("Received: " + new String(body, "UTF-8") + ", deliveryTag: " + envelope.getDeliveryTag() + ", messageId: " + properties.getMessageId());process(body); //自己处理逻辑方法System.out.println("Received: " + new String(body, "UTF-8") + ", deliveryTag: " + envelope.getDeliveryTag() + ", messageId: " + properties.getMessageId());channel.basicAck(envelope.getDeliveryTag(), false);}});
- 启动类:
重点是启动类,阿里给的demo都是main方法启动所以消费者这部分写成了静态类方便在项目启动的时候一起启动监控MQ的变化;
public class ServiceBootWebApplication {public static void main(String[] args) {System.setProperty("mail.mime.charset","UTF-8");System.setProperty("mail.mime.splitlongparameters", "false");SpringApplication.run(ServiceBootWebApplication.class, args);try {Receiver.aaa();} catch (IOException e) {e.printStackTrace();} catch (TimeoutException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();}}
- 备注:
正常我们都有多个环境,每个环境都独立买一套阿里MQ太浪费,解决办法是通过
根据不同环境加载不同的vhost
完全个人实践。。。。。
springBOOT集成阿里云MQ-AMQP相关推荐
- SpringBoot集成阿里云短信服务
SpringBoot集成阿里云短信服务 1.准备工作 2.项目集成 2.1 添加依赖 2.2 配置文件 2.3 业务逻辑实现 在实际项目中经常有发送短信的功能,今天进说一下对接阿里云短信服务实现短信发 ...
- springboot集成阿里云短信服务,实现发送短信功能
springboot集成阿里云短信服务,实现发送短信功能 准备工作: 1.登陆阿里云->进入控制台->开通短信服务(进入后根据提示开通) 2.充值(借人家平台发短信你以为不要钱的?我充了3 ...
- SpringBoot集成阿里云存储OSS服务
前言 该文章会先简单的介绍一下阿里云的OSS存储,然后演示如何在SpringBoot项目中集成OSS,每一步都有记录,保证初学者也能看懂. 文章目录 前言 1.阿里云存储OSS是什么? 2.Sprin ...
- springBoot集成阿里云企业邮箱
前言 springboot项目,集成阿里云企业邮箱,进行邮件发送,附带文件 代码 public class AliyunMail {public static final String ALIDM_S ...
- springboot集成阿里云rocketMQ代码示例
集成目标:完成生产者发送消息,消费者接收消息的整个流程 集成步骤: 1.引入jar包依赖 <!--rocketMq消息队列--><dependency><groupId& ...
- SpringBoot集成阿里云支付
阿里云支付 支付宝官方文档说明 https://opendocs.alipay.com/open/203/107091 开发准备 1.登录支付宝开发平台(支付宝账号) 地址: https://open ...
- SpringBoot集成阿里云短信服务实现登录注册(超详细)
本篇博客采用得技术为:springboot + redis + aliyun短信验证 redis我用来做短信校验,首先我们先刨除redis部分做一个发送功能 登录你得阿里云账号 1 -> 控制台 ...
- java SpringBoot 集成 阿里云视频直播 完成直播功能
经历了几天的周折,近期才把项目完成,在这里与大家分享一下踩坑之路,也方便日后有类似项目,可以借阅一番 开发直播前先满足已下条件 1.开通视频直播功能 2.购买好了OSS存储 3.购买两个域名并且备案好 ...
- Java SpringBoot集成阿里云短信与邮件服务
1.pom.xml导入jar包 <!--阿里云短信 --><dependency><groupId>com.aliyun</groupId><ar ...
最新文章
- python数据模型搭建_python之路(19)django数据库模型(model)
- java postdelayed_Android开发使用Handler的PostDelayed方法实现图片轮播功能
- C++ vector容器中用erase函数和迭代器删除重复元素问题分析
- 转:min(x,y)高效算法
- pyecharts x轴字体大小调整_pyecharts 柱状图基础篇#学习笔记#
- oracle sde 安装失败,sde无法安装案例
- [Lottie动画工具 v3.4.4]
- Setup the FD.io Repository - Centos 7
- /etc/profile、~/.bash_profile、~/.bashrc和/etc/bashrc
- react privateRoute
- centos mysql 安装 innodb_centos 6下安装innodb_ruby
- JS 绘制 Cardinal 样条曲线
- c语言死循坏的作用,c语言什么是死循环
- DSP TMS320C6455 中断解析
- iphone 升级后闪退
- 腾讯云web应用防火墙(WAF)防护设置步骤介绍
- 云计算、大数据、人工智能时代,为什么不能错过Linux?
- 【LWIP】原始套接字(SOCK_RAW)
- java 二嗨租车项目_Java第二季租车系统参考
- android 音乐文件删除,如何从华为手机恢复已删除的音频或音乐文件