微信公众号
订阅号开发(服务号需要企业认证,不适合个人开发) 1 注册微信公众号 1.注册网站 官网:https://mp.weixin.qq.com/ 2.注册流程 1)打开官网,点击右上角的立即注册 2)选择订阅号注册 3)依次输入要求的信息,勾上我同意,点击注册 4)选择中国内地,点击确定 5)选择订阅号确定 6)主体类型选择个人,填写好信息点击继续 7)填写好信息点击完成 关键词回复: 半匹配:只要包含关键字即可 全匹配:跟名字一样 开发者自行开发 接口测试号 位置: 微信官方文档->开始开发->接口测试号申请 打开WebStorm创建一个简单的服务器: 在工程文件夹下导包: npm install express 12345678910//引入express模块const express = require('express')//创建app应用对象const app = express();//验证服务器的有效性app.use((req,res,next)=>{})//监听端口号app.listen(3000,()=> ...
goroutine的调度
转载于 引用站外地址 go夜读 https://github.com/talkgo/night/blob/master/content/night/12-2018-08-02-goroutine-GPM.md 阅读源码前可以阅读的资料 Goroutine背后的系统知识 golang源码剖析-雨痕老师 go-intervals 也谈goroutine调度器 golang的调度模型概览 调度的机制用一句话描述: runtime准备好G,P,M,然后M绑定P,M从各种队列中获取G,切换到G的执行栈上并执行G上的任务函数,调用goexit做清理工作并回到M,如此反复。 基本概念 M(machine) M代表着真正的执行计算资源,可以认为它就是os thread(系统线程)。 M是真正调度系统的执行者,每个M就像一个勤劳的工作者,总是从各种队列中找到可运行的G,而且这样M的可以同时存在多个。 M在绑定有效的P后,进入调度循环,而且 ...
RabbitMQ:5.异地容灾
Federation插件 简介 Federation插件的设计目标是使RabbitMQ在不同的Broker节点之间进行消息传递而无须建立集群。 它可以在不同的管理域中的Broker或集群间传递消息,这些管理域可能设置了不同的用户和vhost,也可能运行在不同版本的RabbitMQ和Erlang上。Federation基于AMQP 0-9-1协议在不同的Broker之间进行通信,并且设计成能够容忍不稳定的网络连接情况。 Federation交换机 总体说明 各节点操作:启用联邦插件 下游操作: 添加上游连接端点 创建控制策略 准备工作 为了执行相关测试,我们使用Docker创建两个RabbitMQ实例。 特别提示:由于Federation机制的最大特点就是跨集群同步数据,所以这两个Docker容器中的RabbitMQ实例不加入集群!!!是两个独立的broker实例。 1234567891011121314151617docker run -d \--name rabbitmq-shenzhen \-p 51000:5672 \-p 52000:15672 \-v rabbitm ...
RabbitMQ:4.集群
集群搭建 安装RabbitMQ 前置要求 CentOS发行版的版本≥CentOS 8 Stream 镜像下载地址:https://mirrors.163.com/centos/8-stream/isos/x86_64/CentOS-Stream-8-20240318.0-x86_64-dvd1.iso RabbitMQ安装方式官方指南: 安装Erlang环境 创建yum库配置文件 1vim /etc/yum.repos.d/rabbitmq.repo 加入配置内容 以下内容来自官方文档:https://www.rabbitmq.com/docs/install-rpm 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 ...
RabbitMQ:3.进阶
整合SpringBoot 消费者工程 创建module 配置pom.xml 1234567891011121314151617181920<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.5</version></parent><dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <grou ...
RabbitMQ:2.基础
HelloRabbitMQ 目标 生产者发送消息,消费者接收消息,用最简单的方式实现 官网说明参见下面超链接: RabbitMQ tutorial - “Hello World!” — RabbitMQ 具体操作 创建Java工程 创建一个空项目 新建一个模块 添加依赖 1234567<dependencies> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.20.0</version> </dependency></dependencies> 发送消息 Java代码 12345678910111213141516171819202122232425262728293031323334353637383940414243import com.rabbitm ...
RabbitMQ:1.安装
在学习RabbitMQ之前,我们先讲讲怎么安装RabbitMQ。 Docker安装 还不会Docker的小朋友可以看看我之前的一篇文章: 引用站外地址 docker https://www.yuanyuan.blog/posts/f255ffad.html 12345678910111213141516# 拉取镜像docker pull rabbitmq:3.13-management# -d 参数:后台运行 Docker 容器# --name 参数:设置容器名称# -p 参数:映射端口号,格式是“宿主机端口号:容器内端口号”。5672供客户端程序访问,15672供后台管理界面访问# -v 参数:卷映射目录# -e 参数:设置容器内的环境变量,这里我们设置了登录RabbitMQ管理后台的默认用户和密码docker run -d \--name rabbitmq \-p 5672:5672 \-p 15672:15672 \-v ...
Kafka3.7.0:4.Kafka集群
Kafka集群搭建 Kafka集群搭建方式 基于Zookeeper的集群搭建方式 基于Kraft的集群搭建方式 基于Zookeeper的集群搭建 解压三个kafka 配置kafka集群:server.properties 集群启动并测试 解压 1234tar -zxvf kafka_2.13-3.7.0.tgz # 解压mv kafka_2.13-3.7.0 kafka-01cp -r kafka-01 kafka-02cp -r kafka-01 kafka-03 配置kafka集群 配置kafka集群:server.properties 三台分别配置为: broker.id=1、broker.id=2、broker.id=3 12cd kafka-01/configvim server.properties 其他2个同理。 该配置项是每个broker的唯一id,取值在0~255之间 三台分别配置listener=PAINTEXT:IP:PORT 123listeners=PLAINTEXT://0.0.0.0:9091listeners=PLAINTEXT:// ...
gRPC
gRPC gRPC入门 gRPC简介 gRPC来自Google,它是一个开源的框架;它同时也是Cloud Native Computation基金会(CNCF)的一部分,就像Docker和Kubernetes一样。 gRPC允许你为RPC(Remote Procedure call)定义请求和响应,然后gRPC会帮你处理一切剩余问题。 它速度快,执行效率高,基于HTTP/2构建,低延迟,支持流,与开发语言无关,并且可以很简单的插入身份认证、负载均衡、日志和监控等功能。 gRPC它是对RPC一种非常简洁的实现并且解决了很多RPC的问题。 gRPC结构 设计步骤 生命周期 如何学习gRPC 首先,你得学习Protocol Buffers(https://developers.google.com/protocol-buffers/),简单的说,它可以用来定义消息和服务。 然后,你只需要实现服务即可,剩余的gRPC代码将会自动为你生成。 .proto这个文件可以适用于十几种开发语言(包括服务端和客户端),并且它允许你使用同一个框架来支持每秒百万级以上的RPC调用。 开发模式 gPRC ...
kotlin协程
Kotlin协程 协程是什么 协程是一个与线程并列的概念,二者都是用来管理并发的,不过概念模型不太一样,有的编程语言用线程管理并发,有的使用协程,有的都用,所以kotlin的协程就是一个并发管理工具,定位和线程是一样的。因为kotlin是一门中间语言,它的代码最终还是要编译成Java字节码,这里讲都是Jvm上的协程,而Jvm提供的只有线程那一套,kotlin作为上层语言,是不可能绕过线程来创建新的并发实现的,那它是怎么办的呢? 实际上,kotlin协程的底层依然是通过Java的线程实现的,它把线程包起来,封装成一套新的API来让我们管理并发,它是一个用Java线程来实现的并发管理工具库。那问题就来了,我都有线程了,为什么要使用协程这个上层包装? 因为它包的好,虽然底层是线程,但协程比线程要好用。好用在哪呢? 协程有很多比线程好用的点,但其中最重要的一点就在于它能用线性的结构来写异步代码。 分类 按调用栈分类 通常我们提及调用栈,指的就是函数调用栈,是一种用来保保存函数调用时的状态信息的数据结构。 由于协程需要支持挂起、恢复,因此对于挂起点的状态保存就显得极其关键。类似地,线程会因为CP ...
Kotlin-Flow
Kotlin-Flow 在学习Kotlin Flow之前,我们先举一个例子,循环调用10次网络请求,获取的结果平方,然后过滤掉奇数,最后取前2个,然后打印。 请先在 build.gradle.kts 中添加协程依赖项 1implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import kotlinx.coroutines.delayimport kotlinx.coroutines.flow.*import kotlinx.coroutines.runBlockingimport kotlin.random.Randomfun main(): Unit = runBlocking {// notUseFlow() useFlow()}suspend fun useFlo ...
curl
HTTP常见请求 命令 作用 示例 curl URL 测试与目标是否能正常连接,对api进行请求,可以返回api请求的数据(默认GET请求) curl http://localhost:3000/getAllUsers curl -X -POST URL -d 数据(等同于curl -XPOST URL -d 数据) POST请求 curl -XPOST http://localhost:3000/addUser -d ‘{“name”: “zhangsan”}’ curl -X -PUT URL -d 数据(等同于curl -XPUT URL -d 数据) PUT请求,更新数据 curl -XPUT http://localhost:3000/updateUser/1 -d ‘{“name”: “lisi”}’ curl -X -DELETE URL(等同于curl -XDELETE URL) DELETE请求,删除数据 curl -XDELETE http://localhost:3000/deleteUser/1 curl URL -H 首部 添加首 ...