RabbitMQ

后端架构师图鉴

放肆的年华 提交于 2021-02-15 02:57:15
后端架构师图鉴 作者:星晴(当地小有名气,小到只有自己知道的杰伦粉) 忽略:我准备从博客园( https://www.cnblogs.com/pingping-joe/ )转移到公众号了!!! 从2017年开始写博客到现在,经历了几家公司,碰到不少有趣的人,人也成长不少,褪去幼稚的面孔,只剩下越发后移的发际线;一路坎坷,唯一还在坚持的就只剩下写博客了,虽然不知道为什么坚持,但是感觉还不错。 今天第一天发公众号推文,作为搞java的,还是给大家准备了架构师的学习路线。当然如果大家都知道,可以忽略。 架构师学习路线大致分为五个部分: 互联网运维 Git,Maven,Gradle,jenkins,linux 框架源码分析 Spring , Mybatis 并发编程 并发包 性能调优 JVM调优,Mysql调优,Nginx调优,Tomcat调优 分布式框架 分布式服务治理:Dubbo, Zookeeper, SpringCloud-Alibaba,SpringCloud-NetFliex 分布式消息:RocketMq, RabbitMq, Kafka 分布式数据缓存:Redis 分布式数据存储:Sharding-sphere 分布式通信:Netty 分布式搜索引擎:ELK 如果想要完整的学习路线,请关注公众号,并且回复【1】,谢谢支持 本文分享自微信公众号 - 喜欢奶茶的星晴(code

Springboot 整合RabbitMQ

 ̄綄美尐妖づ 提交于 2021-02-14 09:30:32
消息队列 何谓消息队列,我们都知道,队列 queue 我们在学习线程知识的时候碰到过,多线程 生产者消费者模型 生产者生产产品到队列当中。消费者从队列当中拿取产品进行消费。这就是一个队列,当生产者消费的速度大于消费者消费的速度,所堆积起来的东西就需要一个东西来进行缓存它,然后让消费者慢慢消费。就好比一个冰箱,一次性买的太多吃不完,那就先放到冰箱里面,慢慢吃完。 RabbitMQ 作为一款优秀的消息队列,生产者和消费者通过中间件队列进行解耦。无需关心是谁生产的,达到解耦的目的。 相关概念 我们通过这样一张图,就会有这样几个概念需要理解 生产者 消费者 RabbitMQ (包含交换机和队列) 生产者和消费者、队列我们已经举例过了。这里主要说一下交换机以及虚拟主机 交换机 从这个名称我就可以大致了解到。和网络交换机的概念差不多,网络交换机用来处理以太网数据帧(包) 达到交换转发的目的。很显然,我们这里的交换机也是这样的,用来交换消息,这里需要注意的地方就是 路由键 先来创建一个demo ,里面涉及到的内容,我会这逐一分析 Demo 练习 通过Springboot 整合RabbitMQ的方式来学习MQ 当中的一些交换机类型、以及虚拟主机、绑定等概念 <dependency> <groupId>org.springframework.boot</groupId> <artifactId

spring cloud

匆匆过客 提交于 2021-02-13 20:31:19
启动config-server,启动成功后就不需要在管了; 在config-client做些修改: 在使用的controller或service的类上加上一个注解 @RefreshScope 在pom中加入依赖: < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-actuator </ artifactId > </ dependency > 至此,准备工作完毕 接下来修改配置文件中的属性值, 无需重启congif-server,他会自动更新值; 接下来调用config-client的refresh方法, curl -X POST http://127.0.0.1:9020/refresh 在config-client控制台会有日志刷新,大意思是重新连接config-server,刷新取值;接下来就可以验证结果,期间无需重启服务; { "timestamp": 1545295648687, "status": 401, "error": "Unauthorized", "message": "Full authentication is required to access this resource", "path": "

具有完整讲解文档的7个Java开源项目,值得一学!

a 夏天 提交于 2021-02-13 17:17:40
最近看了一个开源项目RuoYi-Vue,感觉挺不错的 所以,你学到了啥? emmm,学会了前后端分离,多数据源运用?好像没其它了… 嗐,这么好的一个开源项目你就学了这点东西? 你有啥好建议呀,怎么学习开源项目? 我给你几个主流项目笔记,是一个大神整理和分享的,你可以参考学习,提高效率! 项目一: cloud-platform 学习重点: 服务鉴权中心 用户间鉴权 服务之间鉴权 springcloud组件大回顾 图文笔记: 视频讲解: 项目二: Guns 学习重点: map+warpper模式 Api数据传输安全 数据范围限定 多数据源、jwt 图文笔记: 视频链接: 项目三: bootshiro 学习重点: restful接口设计 前后端分离 数据传输动态秘钥加密 jwt过期自动刷新 图文讲解: 项目四: vueblog 学习重点: 如何搭建一个脚手架 前后端分离如何对接 如何开发Vue+element-ui项目 从0到1开发一个项目的完整教程 图文讲解: 视频讲解: 项目五: renren-fast 学习重点: 项目技术框架分析 前后端分离-token机制 安全防范模块--预防xss攻击与sql注入 多数据源的使用分析总结 如何Docker部署项目 图文文档目录: 项目六: miaosha 学习重点: 秒杀系统场景特点与设计要点分析 高并发优化方向 秒杀限流处理

秒杀系统后台实现详解

雨燕双飞 提交于 2021-02-13 16:39:13
秒杀后台实现 本文主要讲解项目实战中秒杀如何解决下面问题: 1)实现秒杀异步下单,掌握如何保证生产者&消费者消息不丢失 2)实现防止恶意刷单 3)实现防止相同商品重复秒杀 4)实现秒杀下单接口隐藏 5)实现下单接口限流 1 秒杀异步下单 用户在下单的时候,需要基于JWT令牌信息进行登陆人信息认证,确定当前订单是属于谁的。 针对秒杀的特殊业务场景,仅仅依靠对象缓存或者页面静态化等技术去解决服务端压力还是远远不够。 对于数据库压力还是很大,所以需要异步下单,异步是最好的解决办法,但会带来一些额外的程序上的 复杂性。 1.1 秒杀服务-下单实现 1)将tokenDecode工具类config放入秒杀服务并声明Bean public static void main(String[] args){ SpringApplication.run(SeckillApplication,class,args); } @Bean public TokenDecode tokenDecode(){ return new TokenDecode(); } 2)更新秒杀服务启动类,添加redis配置 /** * 设置 redisTemplate 的序列化设置 * @param redisConnectionFactory * @return */ @Bean public RedisTemplate

Spring Cloud Config 和Spring Cloud Bus实现配置中心

老子叫甜甜 提交于 2021-02-12 19:05:09
Spring Cloud是很多组件的集合,Spring将常用的技术框架进行包装和整合,如mybatis zookeeper rabbitmq redis等等,还有一些科技公司贡献出来的一些经过生产环境验证的组件如奈飞公司贡献出的eureke(服务发现) Hystrix(监控与隔离) Feign(声明式服务调用) Ribbon(负载均衡) Zuul(网关) 等等,详情移步官网 SpringCloud Spring Cloud是目前比较流行的微服务开发框架,可以与容器技术如docker一起使用,提高生产力。但是组件过多也有一定的学习曲线,而且适合大公司的架构不见得适合我们的业务,要根据实际情况灵活运用。 Spring Cloud Config是基于git/svn仓库来管理配置,然后有一个ConfigServer来负责拉取配置,ConfigClient是使用配置的应用,比如现在有很多微服务应用,如订单管理,用户管理,地址管理,库存管理等等,在这些微服务的pom中增加ConfigClient就可以自动从ConfigServer拉取配置。我们还希望配置更新之后可以实时获取,这时候需要用到spring cloud中的bus组件,bus其实就是基于amqp的一个消息总线,spring对rabbitmq和kafka支持的比较好。常见的场景是: 1、更改配置 2、push到远程仓库 3

一口气说出“6种”延时队列实现方法,面试官也得服

倾然丶 夕夏残阳落幕 提交于 2021-02-11 21:53:31
下边会介绍多种实现延时队列的思路。其实哪种方式都没有绝对的好与坏,只是看把它用在什么业务场景中,技术这东西没有最好的只有最合适的。 一、延时队列的应用 什么是延时队列?顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。 延时队列在项目中的应用还是比较多的,尤其像电商类平台: 1、订单成功后,在30分钟内没有支付,自动取消订单 2、外卖平台发送订餐通知,下单成功后60s给用户推送短信。 3、如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存 4、淘宝新建商户一个月内还没上传商品信息,将冻结商铺等 。。。。 上边的这些场景都可以应用延时队列解决。 二、延时队列的实现 我个人一直秉承的观点:工作上能用 JDK 自带 API 实现的功能,就不要轻易自己重复造轮子,或者引入三方中间件。一方面自己封装很容易出问题(大佬除外),再加上调试验证产生许多不必要的工作量;另一方面一旦接入三方的中间件就会让系统复杂度成倍的增加,维护成本也大大的增加。 1、DelayQueue 延时队列 JDK 中提供了一组实现延迟队列的 API ,位于 Java.util.concurrent 包下 DelayQueue 。 DelayQueue 是一个 BlockingQueue (无界阻塞)队列,它本质就是封装了一个

RabbitMQ持久化

荒凉一梦 提交于 2021-02-11 17:28:13
我们知道,如果消息接收端挂了,消息会保存在队列里。下次接收端启动就会接收到消息。 如果RabbitMQ挂了怎么办呢?这时候需要将消息持久化到硬盘 消息发送端:producer ........... # 建立管道 channel = connection.channel() # 声明队列 1、加上durable=True进行队列持久化。两边都要加(当RabbitMQ服务down了之后) channel.queue_declare(queue= " q1 " ,durable= True) # 发消息 channel.basic_publish(exchange= '' , routing_key = ' q1 ' , body = ' everything is just beginning! ' , # 3、加上这句话,对消息进行持久化,只需要在发送方写(RabbitMQ服务down了之后) properties=pika.BasicProperties(delivery_mode=2 )) ....... 消息接收端:consumer ......... # 建管道 channel = connection.channel() # 声明队列 2、加上durable=True进行队列持久化 channel.queue_declare(queue= ' q1 ' , durable

celery consume send_task response

流过昼夜 提交于 2021-02-11 15:19:10
问题 In django application I need to call an external rabbitmq, running on a windows server and using some application there, where the django app runs on a linux server. I'm currently able to add a task to the queue by using the celery send_task : app.send_task('tasks', kwargs=self.get_input(), queue=Queue('queue_async', durable=False)) My settings looks like: CELERY_BROKER_URL = CELERY_CONFIG['broker_url'] BROKER_TRANSPORT_OPTIONS = {"max_retries": 3, "interval_start": 0, "interval_step": 0.2,

rabbitMQ Configuration file missing

本小妞迷上赌 提交于 2021-02-11 15:01:32
问题 I am using Rabbitmq 3.7.2 and Erlang 20.2 , and bydefualt RMQ config file missing in following path C:\Users\vxadmin\AppData\Roaming\RabbitMQ\config based on references following step i took - 1 Created environment variable RABBITMQ_CONFIG_FILE C:\Users\vxadmin\AppData\Roaming\RabbitMQ\config 2 Open command prompt as Admin and run rabbitmq-service.bat remove but its throw the error "C:\Users\vxadmin\AppData\Roaming\RabbitMQ\config"' is not recognized as an internal or external command,