mq

领域驱动六边形架构与分层架构的区别

血红的双手。 提交于 2019-11-29 11:58:11
作为一个后端程序员,MVC三层架构的模式相信大家都不会陌生,三层分别从上而下排布,只能由上层调用下层。一般越往下层越通用,越上层越细节。 随着某些核心业务的访问量发展,通常我们需要去进行优化的措施,比如加缓存,加MQ,换数据源 1.缓存可选redis,memcache 2.MQ可选kafka,rocketmq,rabbitmq 3.数据源可选:mysql,mongodb,elasticsearch 当然,我们在做这些优化的时候,会将mq,mongodb等看成基础设施层。 由此衍生出四层的架构,infrastructure里封装redis和mq的通用调用逻辑 这些优化的动作,通常不会改变原有的业务逻辑。但是为了做优化,我们会将它写在service层,比如: 1.执行成功就发个MQ 2.执行某个事件的时候,同步一下缓存 3.依赖关系为,domain依赖infrastructure 问题点: 按道理来说,domain层是写业务逻辑的,优化不会涉及到业务逻辑的改动,但是却改动了domain层。由于domain层依赖了infrastucture的原因,导致业务依赖于具体的实现技术。所以,为了将业务与具体实现做分离,我们采用依赖倒置的手段去重构 依赖倒置原则的包含如下的三层含义: 1.高层模块不应该依赖低层模块,两者都应该依赖其抽象 2.抽象不应该依赖细节 3.细节应该依赖抽象

MQ(一):消息中间件开篇

若如初见. 提交于 2019-11-29 10:07:05
就MQ而言, MQ长期不看不用或者习惯套用很容易让人淡忘他的原理和基础,所以我在此开一篇写关于消息中间件的原理与案例帮助自己巩固基础。 注:对于MQ的文章,我会将原理和代码案例放进github中,案例搭建我会放进博客中 。 入口:点击进入 来源: https://www.cnblogs.com/kongliuyi/p/11512576.html

消息队列

痴心易碎 提交于 2019-11-29 09:56:37
面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: 第一 ,你知不知道你们系统里为什么要用消息队列这个东西? 不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。其实说白了,就是为了用而用,或者是别人设计的架构,他从头到尾都没思考过。 没有对自己的架构问过为什么的人,一定是平时没有思考的人,面试官对这类候选人印象通常很不好。因为面试官担心你进了团队之后只会木头木脑的干呆活儿,不会自己思考。 第二 ,你既然用了消息队列这个东西,你知不知道用了有什么好处&坏处? 你要是没考虑过这个,那你盲目弄个 MQ 进系统里,后面出了问题你是不是就自己溜了给公司留坑?你要是没考虑过引入一个技术可能存在的弊端和风险,面试官把这类候选人招进来了,基本可能就是挖坑型选手。就怕你干 1 年挖一堆坑,自己跳槽了,给公司留下无穷后患。 第三 ,既然你用了 MQ,可能是某一种 MQ,那么你当时做没做过调研? 你别傻乎乎的自己拍脑袋看个人喜好就瞎用了一个 MQ,比如 Kafka,甚至都从没调研过业界流行的 MQ 到底有哪几种。每一个 MQ 的优点和缺点是什么。每一个 MQ 没有绝对的好坏 ,但是就是看用在哪个场景可以 扬长避短

Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,消息队列有什么优点和缺点

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-29 09:48:57
面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: 第一 ,你知不知道你们系统里为什么要用消息队列这个东西? 不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。其实说白了,就是为了用而用,或者是别人设计的架构,他从头到尾都没思考过。 没有对自己的架构问过为什么的人,一定是平时没有思考的人,面试官对这类候选人印象通常很不好。因为面试官担心你进了团队之后只会木头木脑的干呆活儿,不会自己思考。 第二 ,你既然用了消息队列这个东西,你知不知道用了有什么好处&坏处? 你要是没考虑过这个,那你盲目弄个 MQ 进系统里,后面出了问题你是不是就自己溜了给公司留坑?你要是没考虑过引入一个技术可能存在的弊端和风险,面试官把这类候选人招进来了,基本可能就是挖坑型选手。就怕你干 1 年挖一堆坑,自己跳槽了,给公司留下无穷后患。 第三 ,既然你用了 MQ,可能是某一种 MQ,那么你当时做没做过调研? 你别傻乎乎的自己拍脑袋看个人喜好就瞎用了一个 MQ,比如 Kafka,甚至都从没调研过业界流行的 MQ 到底有哪几种。每一个 MQ 的优点和缺点是什么。每一个 MQ 没有绝对的好坏 ,但是就是看用在哪个场景可以 扬长避短

How to pool the JMS connection in a standalone Java application?

柔情痞子 提交于 2019-11-29 07:41:13
We are working on an IBM WebSphere MQ application, and we use JMS API to operate the message. But we have a problem that the connection takes too much time, and we want to pool the JMS connection, for it's a standalone application, we have no application container to provide JNDI or pooling service. So is there a solution to resolve this? For JDBC we can use DBCP or c3p0 to archive pooling datasource, in JMS, is there any similar project that can pool JMS connections? It used to be that the JMS MQConnectionFactory had pooling built in, but it seems that in version 7, it has been removed. Set

基于使用ISCSI存储的ibmmq通过heartbeat实现HA方案以及碰到的问题总结

…衆ロ難τιáo~ 提交于 2019-11-29 07:07:37
一、背景    ibmmq是一种传统架构的mq产品,运行稳定,有其自身优点,但在高可用(HA)这一块需要使用公司根据自身需求选用高可用(HA)产品,但由于市面HA商业产品较贵,所以使用linux操作系统级的heartbeat产品是最廉价合适的。关于ibmmq网络共享存储的选用有很多,最贴近生产环境的是ISCSI协议的存储,所以使用ISCSI做为mq服务器共享存储(下文有一点存储方面的知识)。 部署架构图: 二、解决思路    1、搭建共享存储环境;    2、安装heartbeat;    3、安装mq软件;    4、相关脚本补齐;    5、测试 三、使用技术栈及版本    1、linux版本:redhat6.7    2、共享存储,iscsi    Target版本:scsi-target-utils-1.0.24-18.el6.x86_64    Initiator版本:iscsi-initiator-utils-6.2.0.873-27.el6_9.x86_64    网络共享存储介绍:按照网络结构分:扫盲文章: http://www.ptyqm.com/19026.html    根据生产环境情况,只考虑两种共享存储实现     1)NAS:网络附加存储,NFS共享存储实现简单,方便使用,以文件系统的形式被使用,因为是以文件系统的方式提供,所以在数据传输速度上比较慢;

RabbitMQ消息幂等性问题

这一生的挚爱 提交于 2019-11-29 07:06:31
文章目录 1. 什么是幂等性? 1.1 消息队列的幂等性 1.2 模拟重试机制 1.2.1 生产者代码 1.2.2 消费者代码 1.2.3 消费者 application.yml 配置 2. 如何保证消息幂等性,不被重复消费? 解决方法 1. 什么是幂等性? 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。幂等性属于语义范畴,正如编译器只能帮助检查语法错误一样,HTTP规范也没有办法通过消息格式等语法手段来定义它。 简之:一个请求,不管重复来多少次,结果是不会改变的。 1.1 消息队列的幂等性 如同HTTP方法的幂等性,消息队列同样会出现幂等性问题。 消费者在消费 MQ 中的消息时,MQ 已把消息发送给消费者,消费者在给 MQ 返回 ack 时网络中断,故 MQ 未收到确认信息,该条消息会重新发给其他的消费者,或者在网络重连后再次发送给该消费者,但实际上该消费者已成功消费了该条消息,造成消费者消费了重复的消息;注意,RabbitMQ 这种消息重试(补偿)机制是默认的。 所以,MQ 消费者的幂等性问题,主要在于 MQ 的重试机制,因为网络原因或客户端延迟消费导致重复消费。 那么,如何合适选择重试机制?我们来看两种情况。 情况1: 消费者获取到消息后,调用第三方接口,但接口暂时无法访问

基于levelDB可复制master/slave(zookeeper+levelDB)

痞子三分冷 提交于 2019-11-29 06:33:15
Leveldb是一个google实现的非常高效的kv数据库,是单进程的服务,能够处理十亿级别规模Key-Value型数据,占用内存小。 基于可复制LevelDB的集群方案,需要引入ZooKeeper。根据ZooKeeper的使用方式可以分为单节点的ZooKeeper和Zookeeper集群。这里我们只讲述ZooKeeper集群,单节点不是一个可靠的选择。 4.1 Zookeeper集群配置 ZooKeeper可以在网站http://zookeeper.apache.org/ 下载。我们使用的是zookeeper-3.4.6,假设ZooKeeper分部署在下面三个目录中。 D:\MQ\apache-activemq\cluster\zookeeper1 D:\MQ\apache-activemq\cluster\zookeeper2 D:\MQ\apache-activemq\cluster\zookeeper3 4.1.1 zoo.cfg 把3个节点中config目录下的zoo_sample.cfg复制一份,改成zoo.cfg。 因为是在一台主机上部署,所以每个zoo.cfg中的clientPort不能重复;如果有三台主机,那么采用默认的clientPort就行,同理server.1、server.2、server.3可以写作<各自ip>:2888:3888。

MQ的调用

只谈情不闲聊 提交于 2019-11-29 04:14:17
mq调用 using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MqTest2 { class Program { static void Main(string[] args) { } /// <summary> /// 获取数据 /// </summary> static public void GetData() { MqHelper mqHelper = new MqHelper(); var e = mqHelper.GetMQMsg(); byte[] data = null; data = e.Body; var result = Encoding.UTF8.GetString(data); } /// <summary> /// 发送数据 /// </summary> static public void SendData() { MqHelper mqHelper = new MqHelper(); Student student = new Student() {