YML

RabbitMQ消息幂等性问题

╄→гoц情女王★ 提交于 2020-12-13 00:42:02
文章目录 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: 消费者获取到消息后,调用第三方接口,但接口暂时无法访问

MyBatis实现一对一,一对多关联查询

℡╲_俬逩灬. 提交于 2020-12-12 17:34:17
MyBatis如何实现一对一,一对多查询的? 可以通过关联查询实现。关联查询是几个表联合查询,只查询一次,通过在resultMap里面的association,collection节点配置一对一,一对多的类就可以完成 具体实现如下 准备数据库表结构与数据 班级classes与老师teacher是一对一的关系 班级classes与学生student是一对多的关系 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for classes -- ---------------------------- DROP TABLE IF EXISTS `classes`; CREATE TABLE `classes` ( `c_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '班级id', `c_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '班级名', `teacher_id` int(11) NULL DEFAULT NULL COMMENT '老师id', PRIMARY KEY

ELK平台搭建

耗尽温柔 提交于 2020-12-12 17:32:29
我看大部分教程都是在linux搭建的,那么俺就搭建在win上面吧。 首先,下载E+L+K,下面这个地址都有这3个相关的软件包 Elasticsearch+Logstash+Kibana https://www.elastic.co/downloads 1、安装Logstash,Logstash的版本为:6.3.1 解压后,进入bin文件夹下,新建配置文件logstash.conf,让后输入下面内容 input { kafka{ bootstrap_servers => ["192.168.1.1:9092"] client_id => "test" group_id => "test" topics => ["test"] auto_offset_reset => "latest" codec => json{charset=>"UTF-8"} } } output { elasticsearch { hosts => ["192.168.1.1:9200"] codec => json{charset=>"UTF-8"} index=> "%{source}" } } stdin表示在控制台输入,也可以用其他方式输入,elasticsearch表示输出到elasticsearch,index表示json传参进来的index值映射到ES的index上面去。注意,如果传递有中文

乱记k8s单机搭建及测试

老子叫甜甜 提交于 2020-12-12 15:28:23
使用环境:ECS (ubuntu 16.04) K8s单机搭建参照 [ https://blog.csdn.net/nange_nice/article/details/85602456?tdsourcetag=s_pcqq_aiomsg ] https://blog.csdn.net/wangchunfa122/article/details/86529406?tdsourcetag=s_pcqq_aiomsg 我这里只使用了一个node 目前就是master 使用 kubectl create namespace springcloud-cn 创建命名空间 kubectl create -f config-server-rc.yml 创建rc 使用kubectl create -f config-server-svc.yml 创建service ps:关注yml文件的语法问题 可以参见 https://www.jianshu.com/p/116ce601a60f?tdsourcetag=s_pcqq_aiomsg中 对kubectl explain的使用 这时候问题出现了 1 node(s) had taints that the pod didn't tolerate: 经查找,默认 k8s 不允许往 master 节点装东西,强行设置下允许:kubectl taint

微服务之springboot 自定义配置(一)Application配置文件

余生长醉 提交于 2020-12-12 10:04:41
配置的文件的格式 springboot可以识别两种格式的配置文件,分别是yml和properties 文件。我们可以将application.properties文件换成application.yml,这两个文件都可以被SpringBoot自动识别并加载,但是如果是自定义的配置文件,就最好还是使用properties格式的文件,因为SpringBoot中暂时还并未提供手动加载yml格式文件的功能(这里指注解方式)。 yml 配置文件 属性格式: 配置的属性和属性值要有空格隔开 。没有空格报:java.lang.IllegalArgumentException: Could not resolve placeholder 'my.name' in value "${my.name}" server : port : 8888 my : name : forezp age : 12 propreties文件 格式要求: server.port=8888 my.name=forezp my.age=12 application.properties配置文件欲被SpringBoot自动加载,需要放置到指定的位置:src/main/resource目录下,一般自定义的配置文件也位于此目录之下。 application

docker--私有仓库

▼魔方 西西 提交于 2020-12-12 06:39:05
私有仓库 有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。 本节介绍如何使用本地仓库。 docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。本文内容基于 docker-registry v2.x 版本。 安装运行 docker-registry 容器运行 你可以通过获取官方 registry 镜像来运行。 $ docker run -d -p 5000:5000 --restart=always --name registry registry 这将使用官方的 registry 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。你可以通过 -v 参数来将镜像文件存放在本地的指定路径。例如下面的例子将上传的镜像放到本地的 /opt/data/registry 目录。 $ docker run -d \ -p 5000:5000 \ -v /opt/data/registry:/var/lib/registry \ registry 在私有仓库上传、搜索、下载镜像 创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库。例如私有仓库地址为 127.0.0.1:5000。 先在本机查看已有的镜像。 $ docker image ls

软件测试开发实战|接口自动化测试框架开发(pytest+allure+aiohttp+用例自动生成)

寵の児 提交于 2020-12-11 08:41:36
近期准备优先做接口测试的覆盖,为此需要开发一个测试框架,经过思考,这次依然想做点儿不一样的东西。 接口测试是比较讲究效率的,测试人员会希望很快能得到结果反馈,然而接口的数量一般都很多,而且会越来越多,所以提高执行效率很有必要 接口测试的用例其实也可以用来兼做简单的压力测试,而压力测试需要并发 接口测试的用例有很多重复的东西,测试人员应该只需要关注接口测试的设计,这些重复劳动最好自动化来做 pytest和allure太好用了,新框架要集成它们 接口测试的用例应该尽量简洁,最好用yaml,这样数据能直接映射为请求数据,写起用例来跟做填空题一样,便于向没有自动化经验的成员推广 加上我对Python的协程很感兴趣,也学了一段时间,一直希望学以致用,所以http请求我决定用aiohttp来实现。 但是pytest是不支持事件循环的,如果想把它们结合还需要一番功夫。于是继续思考,思考的结果是其实我可以把整个事情分为两部分。 第一部分,读取yaml测试用例,http请求测试接口,收集测试数据。 第二部分,根据测试数据,动态生成pytest认可的测试用例,然后执行,生成测试报告。 这样一来,两者就能完美结合了,也完美符合我所做的设想。想法既定,接着 就是实现了。 第一部分(整个过程都要求是异步非阻塞的) 读取yaml测试用例 一份简单的用例模板我是这样设计的,这样的好处是,参数名和aiohttp

关于rabbitMQ在yml配置手动ack不生效,重复答应的问题

泄露秘密 提交于 2020-12-11 04:33:43
关于rabbitMQ在yml配置手动ack不生效,重复答应的问题 在yml文件中配置了手动答应,但是消费者消费完成时,却还是自动答应 以下是yml配置 #rabbit配置 spring : rabbitmq : # rabbit地址 host : 127.0.0.1 # rabbit端口号 port : 5672 # 用户账号和密码 username : guest password : guest #rabbit项目名,每个virtualHost的队列是隔离的,相当于数据库 virtual-host : /rabbit #开启Publisher Confirms 模式,消息发送到交换器后触发回调。 #publisher-confirms: true #开启PublisherReturn 模式,交换机将消息发送到对应队列失败时触发 #publisher-returns: true listener : direct : #设置监听为手动答应模式 acknowledge-mode : manual 此处已经设置了手动答应,消费者代码是这样的: /** * 推送队列的监听 * 注解中为监听的队列 * @param * @param channel * @param tag * @throws IOException */ @RabbitListener ( queues =

Docker实践:python应用容器化

放肆的年华 提交于 2020-12-10 02:41:43
一、前言    容器使用沙箱机制,互相隔离,优势在于让各个部署在容器的里的应用互不影响,独立运行,提供更高的安全性。本文主要介绍python应用(django)跑在docker容器里,编写dockerfile实现镜像构建自动化以及docker神器compose。 二、编写Dockerfile文件   官网下载的python镜像比较精简,web应用相关依赖还是需要自己安装的。编写Dockerfile,可以让你构建镜像的时候自动化。实例如下: FROM python:3.6.4 RUN mkdir /code \ &&apt-get update \ &&apt-get -y install freetds-dev \ &&apt-get -y install unixodbc-dev COPY app /code COPY requirements.txt /code RUN pip install -r /code/requirements.txt -i https://pypi.douban.com/simple WORKDIR /code CMD ["/bin/bash","run.sh"] FROM: Dockerfile中的一个非常重要的命令,作用是指定一个基础镜像来进行构建流程。比如上面指定了python3.6.4作为基础镜像

SpringBoot入门(五)——自定义配置

我的梦境 提交于 2020-12-07 00:57:01
本文来自 网易云社区 大部分比萨店也提供某种形式的自动配置。你可以点荤比萨、素比萨、香辣意大利比萨,或者是自动配置比萨中的极品——至尊比萨。在下单时,你并没有指定具体的辅料,你所点的比萨种类决定了所用的辅料。但如果你想要至尊比萨上的全部辅料,还想要加墨西哥胡椒,又不想放蘑菇该怎么办?你偏爱辣食又不喜欢吃菌类,自动配置不适合你的口味,你就只能自己配置比萨了吗?当然不是,大部分比萨店会让你以菜单上已有的选项为基础进行定制。 外化属性 属性源 为了使应用能适应不同的环境,SpringBoot支持外化配置。可以使用.properties文件、YAML文件、环境变量、命令行参数等方式。 SpringBoot能从多种属性源获得属性,包括以下几处: 命令行参数 JVM系统属性 操作系统环境变量 随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random.long}) 应用程序以外的application.properties或者application.yml文件 打包在应用程序内的application.properites或者application.yml文件 通过@propertySource标注的属性源 默认属性 优先级由高到低,即在上面的列表中“命令行参数”的优先级最高,会覆盖下面其他属性源的相同配置。 这里只挑选了部分比较常见的属性源