<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[彼岸舞的博客]]></title><description><![CDATA[热爱技术,喜欢挑战,不断最求卓越,期望接近完美]]></description><link>https://blog.youkuaiyun.com/flowerStream</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; flowerStream]]></copyright><item><title><![CDATA[未来发展?智能AI革命与脑联网领域]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/128928806</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/128928806</guid><author>flowerStream</author><pubDate>Tue, 07 Feb 2023 15:50:00 +0800</pubDate><description><![CDATA[前言
最近在看一些关于未来技术的一些书, 分享一下我的感受吧
历史革命
智能制造是国家战略的共同核心，各国都期望借助于自动化、数字化、网络化、智能化手段，减少对人的依赖，实现各自国家向高质、高效、高端、绿色、高竞争力方向发展。

机械革命
第一次工业革命是机械化革命，诞生于18世纪晚期，瓦特改良蒸汽机后，1784年问世的珍妮纺织机实现了生产的机械化，从而催生了车间、工厂这种新型生产组织模式，大...]]></description><category></category></item><item><title><![CDATA[Java 解析 带 T Z 的 UTC 时间格式 日期]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/128653282</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/128653282</guid><author>flowerStream</author><pubDate>Wed, 11 Jan 2023 15:49:00 +0800</pubDate><description><![CDATA[直接上代码吧

public static void main(String[] args) throws ParseException {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        df.setTimeZone(TimeZone.getTimeZone(...]]></description><category></category></item><item><title><![CDATA[Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by se...]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/128615563</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/128615563</guid><author>flowerStream</author><pubDate>Mon, 09 Jan 2023 11:38:00 +0800</pubDate><description><![CDATA[背景
　　今天在写一个数据处理程序的时候, 我打算优化一下我的程序, 本来是直接用Mapper层进行单行记录保存的, 也就是调用的Mapper的insert函数
过程
　　然后我就写了一个Service, 但是我没有写接口, 是直接写了一个具体的实现类

@Service
public class InstitutionService extends ServiceImpl&lt;Institu...]]></description><category></category></item><item><title><![CDATA[22-FAQ登录RabbitMQ控制台提示不是私密连接]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168364</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168364</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:38:00 +0800</pubDate><description><![CDATA[登录RabbitMQ控制台提示不是私密连接
将启动的时候的赋权操作再执行一遍

rabbitmqctl add_user root
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
rabbitmqctl set_user_tags root administrator

再访问就可以了, 要是不行就再创建一个用户

...]]></description><category></category></item><item><title><![CDATA[21-RabbitMQ延迟队列插件]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168672</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168672</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:37:00 +0800</pubDate><description><![CDATA[RabbitMQ延迟队列插件
下载
官网

https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases

我用的是3.10.7的RabbitMQ, 但是官网没有这么新版本的, 只好下载3.10.2得了

安装

# 进入plugins目录
cd /usr/local/rabbitmq/plugins/

上传包
...]]></description><category></category></item><item><title><![CDATA[20-SpringBoot整合RabbitMQ]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168363</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168363</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:35:00 +0800</pubDate><description><![CDATA[SpringBoot整合RabbitMQ
整合就直接使用单机版的了, 一直开着5个虚拟机, 我电脑不太行
新建SpringBoot工程
你已经是一个长大的IDEA了, 要学会自己新建工程, 然后IDEA自己创建了rabbitmq-consumer和rabbitmq-producer工程


添加依赖

&lt;dependency&gt;
    &lt;groupId&gt;org.spri...]]></description><category></category></item><item><title><![CDATA[19-RabbitMQ消息一致性问题]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168361</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168361</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:33:00 +0800</pubDate><description><![CDATA[消息一致性问题

在使用rabbitmq中，消息的一致性是非常重要的一个话题。在数据一致性方面，发送者发送消息出来，在数据一致性的要求下，我们通常认为必须达到以下条件



broker持久化消息
publisher知道消息已经成功持久化



首先，我们可以采用事务来解决此问题。每个消息都必须经历以上两个步骤，就算一次事务成功。
事务是同步的。因此，如果采用事务，发送性能必然很差。官方给出...]]></description><category></category></item><item><title><![CDATA[18-基于CentOS7搭建RabbitMQ3.10.7集群镜像队列+HaProxy+Keepalived高可用架构]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168673</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168673</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:32:00 +0800</pubDate><description><![CDATA[集群架构
虚拟机规划




IP


hostname


节点说明


端口


控制台地址




192.168.247.150


rabbitmq.master


rabbitmq master


5672


http://192.168.247.150:15672




192.168.247.151


rabbitmq.s.o


rabbitmq slave


5...]]></description><category></category></item><item><title><![CDATA[18-RabbitMQ高级特性-死信队列]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168360</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168360</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:23:00 +0800</pubDate><description><![CDATA[死信队列
死信队列: DLX, Dead-Letter-Exchange

利用DLX, 当消息在一个队列中变成死信(dead message)之后, 它能被重新publish到另一个Exchange, 这个Exchange就是DLX
DLX也是一个正常的Exchange, 和一般的Exchange没有区别, 他能在任何的队列上被指定, 实际上就是设置某个队列的属性
当这个队列中有死信时,Ra...]]></description><category></category></item><item><title><![CDATA[17-RabbitMQ高级特性-TTL队列/消息]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168359</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168359</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:22:00 +0800</pubDate><description><![CDATA[TTL队列/消息
TTL: Time To Live, 生存时间

RabbitMQ支持消息的过期时间, 在消息发送时可以指定
RabbitMQ支持队列的过期时间, 从消息进入队列开始计算, 只要超过了队列的超时时间配置, 那么消息会被自动清除

TTL队列代码实现
消费者

package com.dance.redis.mq.rabbit.ttl;

import com.dance.re...]]></description><category></category></item><item><title><![CDATA[16-RabbitMQ高级特性-消费端的消息ACK与重回队列]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168709</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168709</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:20:00 +0800</pubDate><description><![CDATA[消费端的消息ACK与重回队列
消费端的手工ACK和NACK

ACK分为自动和手动
消费端进行消费的时候, 如果由于业务异常我们可以进行日志的记录, 然后进行补偿
如果由于服务器宕机等严重问题, 那我们就需要手工进行ACK保障消费端消费成功

消费端的重回队列

消费端重回队列是为了对没有处理成功的消息, 把消息重新会递给Broker
一般我们在实际应用中, 都会关闭重回队列, 也就是设置为F...]]></description><category></category></item><item><title><![CDATA[15-RabbitMQ高级特性-消费端限流]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168358</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168358</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:18:00 +0800</pubDate><description><![CDATA[消费端限流
什么是消费端限流

假设一个场景, 首先, 我们RabbitMQ服务器有上万条消息未处理的消息, 我们随机打开一个消费者客户端, 会出现下面情况



巨量的消息瞬间全部推送过来, 但是我们单个客户端无法同时处理这么多数据



RabbitMQ提供了一种Qos(服务质量保证)功能, 即在非自动确认消息的前提下, 如果一定数目的消息(通过基于consumer或者channel设置Q...]]></description><category></category></item><item><title><![CDATA[14-RabbitMQ高级特性-Return返回消息]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168671</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168671</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:16:00 +0800</pubDate><description><![CDATA[Return返回消息
Return消息机制

Return Listener 用于处理一些不可路由的消息
我们的消息生产者,通过指定一个Exchange和RouteKey, 把消息送达到某一个队列中去,然后我们的消费者监听队列,进行消费处理操作
但是在某些情况下, 我们在发送消息的时候, 当前的Exchange不存在, 或者指定的路由key, 路由不到, 这个时候我们就需要监听这些不可达的消息...]]></description><category></category></item><item><title><![CDATA[13-RabbitMQ高级特性-Confirm确认消息]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168355</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168355</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:15:00 +0800</pubDate><description><![CDATA[Confirm确认消息
理解Confirm消息确认机制

消息的确认, 是指投递消息后, 如果Broker收到消息, 则会给我们生产者一个应答
生产者进行接收应答用来确定这条消息是否正常的发送到Broker, 这种方式也是消息的可靠性投递的核心保障

Confirm确认消息流程解析

Confirm确认消息实现

在Channel上开启确认模式: channel.confirmSelect()...]]></description><category></category></item><item><title><![CDATA[12-RabbitMQ高级特性-在海量订单产生的业务高峰期, 如何避免消息的重复消费问题...]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168353</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168353</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:14:00 +0800</pubDate><description><![CDATA[幂等性概念详解
幂等性是什么

可以借鉴数据库的乐观锁机制
比如执行一条更新库存的SQL



update t_reps set count = count -1 , version = version + 1 where version = 1;


MQ最重要的两个特点就是生产端保证可靠性投递和消费端幂等性消费
消费端-幂等性保障

由消费端实现幂等性, 就意味着, 我们的消息永远不会消...]]></description><category></category></item><item><title><![CDATA[11-RabbitMQ高级特性-消息如何保证100%的投递成功]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168354</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168354</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:11:00 +0800</pubDate><description><![CDATA[消息如何保证100%的投递成功
什么是生产端的可靠性投递

保障消息的成功发出
保障MQ节点的成功接收
发送端收到MQ节点(Broker)确认应答
完善的消息进行补偿机制

BAT/TMD互联网大厂的解决方案
消息信息落库, 对消息状态进行打标


存入本地消息表
打印日志记录
将消息发送到MQ
接收MQ的应答消息
修改本地消息表状态为已发送
如果没有收到MQ的应答消息, 可以通过分布式定时任...]]></description><category></category></item><item><title><![CDATA[10-RabbitMQ核心API-其他[Binding, Queue, Message, Virtual host]]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168352</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168352</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:10:00 +0800</pubDate><description><![CDATA[Binding

绑定关系
Exchange和Exchange, Queue之间的连接关系
Binding中可以包含RouteKey或者参数

Queue

消息队列, 实际存储消息数据
Durability: 是否持久化, Durable: 是, Transient: 否
Auto Delete: 如果是yes, 代表当最后一个监听者被移除之后, 该Queue会被自动被删除

Message...]]></description><category></category></item><item><title><![CDATA[09-RabbitMQ核心API-Fanout Exchange]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168351</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168351</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:09:00 +0800</pubDate><description><![CDATA[Fanout Exchange
简介

不处理路由键, 只需要简单的将队列绑定到交换机上
发送到交换机的消息都会被转发到与该交换机绑定的所有队列上
Fanout交换机转发消息是最快的


代码实现
消费者1

package com.dance.redis.mq.rabbit.fanout;

import com.dance.redis.mq.rabbit.RabbitMQHelper;
i...]]></description><category></category></item><item><title><![CDATA[08-RabbitMQ核心API-Topic Exchange]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168518</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168518</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:07:00 +0800</pubDate><description><![CDATA[Topic Exchange
简介

所有发送到Topic Exchange的消息被转发到所有关心RouteKey中指定Topic的Queue上
Exchange将RouteKey和某Topic进行模糊匹配, 此时队列需要绑定一个Topic
可以使用通配符进行模糊匹配
#: 匹配一个或多个词
*: 匹配不多不少一个词



log.# : 能够匹配 log.info.oa
log.* : 只会...]]></description><category></category></item><item><title><![CDATA[07-RabbitMQ核心API-Direct Exchange]]></title><link>https://blog.youkuaiyun.com/flowerStream/article/details/127168517</link><guid>https://blog.youkuaiyun.com/flowerStream/article/details/127168517</guid><author>flowerStream</author><pubDate>Tue, 04 Oct 2022 23:06:00 +0800</pubDate><description><![CDATA[Direct Exchange
简介
所有发送到direct exchange 的消息被转发到Routekey中指定的Queue

注意: Direct模式可以使用RabbitMQ自带的Exchange(default exchange), 所以不需要将Exchange进行任何Binding操作, 消息传递时RouteKey必须完全匹配才会被队列接收, 否则该消息会被丢弃


代码实现
Rab...]]></description><category></category></item></channel></rss>