erlang

Java 源码剖析(10)--手写一个消息队列和延迟消息队列

倖福魔咒の 提交于 2020-08-09 22:42:48
手写一个消息队列和延迟消息队列 1)消息队列的使用场景 1.1)商品秒杀 1.2)系统解耦 1.3)日志记录 2)消息中间件 RabbitMQ 3)手写一个消息队列和延迟消息队列 1)消息队列的使用场景 1.1)商品秒杀 在做秒杀活动时,会发生短时间内出现爆发式的用户请求,如果不采取相关的措施,会导致服务器忙不过来,响应超时的问题,轻则会导致服务假死,重则会让服务器直接宕机,给用户带来的体验也非常不好。如果这个时候加上了消息队列, 服务器接收到用户的所有请求后,先把这些请求全部写入到消息队列中再排队处理,这样就不会导致同时处理多个请求的情况 ;如果消息队列长度超过可以承载的最大数量,那么我们可以抛弃当前用户的请求,通知前台用户“页面出错啦,请重新刷新”等提示,这样就会有更好的交互体验。 1.2)系统解耦 使用了消息队列之后,我们可以把系统的业务功能模块化,实现系统的解耦。例如,在没有使用消息队列之前,当前台用户完善了个人信息之后,首先我们需要更新用户的资料,再添加一条用户信息修改日志。但突然有一天产品经理提了一个需求,在前台用户信息更新之后,需要给此用户的增加一定的积分奖励,然后没过几天产品经理又提了一个需求,在前台用户信息更新之后,不但要增加积分奖励,还要增加用户的经验值,但没过几天产品经理的需求又变了,他要求完善资料无需增加用户的积分了,这样反反复复、来来回回的折腾

树莓派4B+ubuntu20.04读取ds18b20温度传感器数据

强颜欢笑 提交于 2020-08-09 20:53:25
树莓派4B+ubuntu20.04读取ds18b20温度传感器数据 测试环境 树莓派4B 8G + Ubuntu20.04 64位 1. 断电取下内存卡插入到win10电脑上,修改内存卡下的usercfg.txt文件 2. 在usercfg.txt下添加如下内容: #ds18b20 dtoverlay=w1-gpio-pullup,gpiopin=4 修改如下图所示: 3. 接线 将传感器模块:DQ引脚接GPIO.7引脚上、VCC接3.3V、GND接GND 4. 连接树莓派 ①挂载设备驱动 sudo modprobe w1-gpio sudo modprobe w1-therm ② 确认设备是否生效 cd /sys/bus/w1/devices/ ls 28-011939632f5b 就是外接的温度传感器设备,但并不是每个客户端都显示一样的,这个是传感器的序列号。 ③ 查看当前温度 cat 28-011939632f5b/w1_slave 第二行的 t=25062 就是当前的温度值,要换算成摄氏度,除以 1000 ,即当前温度为 25062 / 1000=25.062 摄氏度。 5. 编写测试代码 用C语言实现 ①编写代码 ds18b20.c //ds18b20.c #include <stdio.h> #include <stdlib.h> #include <string.h>

《Erlang程序设计》 第十二章 接口技术

微笑、不失礼 提交于 2020-08-09 17:29:46
第十二章 接口技术 Table of Contents 第十二章 接口技术 12.1 端口 创建端口 发送数据 改变连接进程的PID 关闭端口 为一个外部C程序添加接口 12.2.1 C程序 12.2.2 Erlang程序 12.3 open_port PortName Opt 12.4 内联驱动 12.5 注意 第十二章 接口技术 Erlang运行第三方代码时需要一个与Erlang运行时系统相互独立的外部程序, 两者通过二进制通道进行通信。在Erlang中是通过端口连接进程来作为中间人管理两者之间的通信。 12.1 端口 创建端口 Port = open_port(PortName, PortSettings) 发送数据 Port ! {PidC, {command, Data}} 改变连接进程的PID Port ! {PidC, connect, Pid1} 关闭端口 Port ! {PidC, close} 为一个外部C程序添加接口 为Erlang与C的程序调用实现一个通信协议: 数据包前两个字节表示数据的长度Len, 之后跟上长度为Len的数据 调用第一个函数twice(需要一个参数x), 则数据格式为[1, N]; 调用第二个函数sum(需要两个参数x, y),则数据格式为[2, M, N] 返回值规定为一个字节 12.2.1 C程序 example1.c

Erlang获取当前时间

百般思念 提交于 2020-08-09 16:34:25
可以用erlang:now()和os:timestamp()来获取当前时间,返回的是形如{MegaSecs, Secs, MicroSecs}这样的元组,如{1396,707464,903000}。 调用erlang:now()的系统开销似乎比os:timestamp()要大。 时间格式转换: 1> erlang:now(). {1396,707464,903000} 2> T = erlang:timestamp(). ** exception error: undefined function erlang:timestamp/0 3> T = os:timestamp(). {1396,707548,396000} 4> T2 = calendar:now_to_universal_time(T). {{2014,4,5},{14,19,8}} 5> T3 = calendar:now_to_local_time(T). {{2014,4,5},{22,19,8}} 参考: now() -> Timestamp Types: Timestamp = timestamp() timestamp() = {MegaSecs :: integer() >= 0, Secs :: integer() >= 0, MicroSecs :: integer() >= 0} Returns

Window下 分布式框架 thrift的安装

痞子三分冷 提交于 2020-08-09 11:00:28
一、Thrift介绍 Thrift最初由Facebook开发,后来提交给了Apache基金会将Thrift作为一个开源项目。facebook开发使用为了解决系统中各个系统间大数据量的传输通信以及系统之间语言环境不同需要夸平台特性,支持C++,Java,Python,PHP, Ruby,Erlang,Perl, Haskell,C#,JavaScript,Node.js,Smalltalk and OCaml都支持。Thrift是一个典型的CS结构,客户端和服务端使用不同的语言开发。既然客户端和服务端使用不同的语言开发,那么一定要有一种中间语言来关联客户端和服务端语言,这种语言就是IDL(Interface Description Language) 二、Window下Thrift环境安装 1、下载thrift,版本为0.13.0 http://archive.apache.org/dist/thrift/0.13.0/ 在D盘新建一个文件夹thrift,然后将thrift-0.13.0.exe重命名为thrift.exe,在D:\thrift文件夹下 2、修改环境变量 系统变量Path中增加D:\thrift 3、在命令行中查看thrift的版本 thrift -version 来源: oschina 链接: https://my.oschina.net/u/4344048

rabbitMQ的安装

戏子无情 提交于 2020-08-09 10:22:31
对 rabbitMQ 我们已经有了初步的了解,现在我们来安装 rabbitMQ 来进行一些操作。因为大部分人的操作系统都是windows 而且作者本人使用的也windows系统。所以这里只介绍在windows上安装rabbitMQ。mac用户自行解决(仇富脸)。 erlang的安装 erlang 不好的地方是它不是向下兼容的,也就是说 rabbitMQ的版本和erlang的版本不匹配的话,会安装失败。所以我们要先上 rabbitMQ的官方网站查询对应的版本号,再安装 网站: https://www.rabbitmq.com/which-erlang.html 查询好版本后向erlang 官方网站下载安装程序,网址: http://www.erlang.org/downloads 下载安装完成之后,配置erlang的环境变量(参考JAVA_HOME)。 变量名:ERLANG_HOME 变量值:你的安装路径 然后将 %ERLANG_HOME%\bin 加入到path中,和Java maven 这些程序的配置方式一样。然后在cmd 中输入 erlang 验证一下,完成。 rabbitMQ的安装 下载地址: http://www.rabbitmq.com/download.html 注意要找对版本下载安装。安装完成后进入RabbitMQ的sbin目录下在cmd中执行 ./rabbitmq

026. RabbitMQ 入门及消息分发机制

空扰寡人 提交于 2020-08-09 06:09:21
1. RabbitMQ 简介 RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 2. RabbitMQ 安装运行 1. 安装依赖环境 安装 通用依赖 yum install -y autoconf yum install -y ncurses-devel 安装 erlang wget https://github.com/erlang/otp/archive/OTP-22.2.tar.gz tar vxf OTP-22.2.tar.gz cd otp-OTP-22.2/ ./otp_build autoconf ./configure make make install 安装 socat sudo yum install -y socat 2. 安装 RabbitMQ 下载 wget -P /home/download https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.23/rabbitmq-server-3.7.23-1.el7.noarch.rpm 可以在 https://github.com/rabbitmq/rabbitmq-server/tags 下载历史版本。

与Project Euler的速度比较:C vs Python vs Erlang vs Haskell

喜夏-厌秋 提交于 2020-08-09 04:12:02
问题: I have taken Problem #12 from Project Euler as a programming exercise and to compare my (surely not optimal) implementations in C, Python, Erlang and Haskell. 我将 Project Euler 中的 问题#12 作为编程练习并比较了我在C,Python,Erlang和Haskell中的(当然不是最优的)实现。 In order to get some higher execution times, I search for the first triangle number with more than 1000 divisors instead of 500 as stated in the original problem. 为了获得更高的执行时间,我搜索第一个三角形数字,其中有超过1000个除数而不是原始问题中所述的500。 The result is the following: 结果如下: C: C: lorenzo@enzo:~/erlang$ gcc -lm -o euler12.bin euler12.c lorenzo@enzo:~/erlang$ time ./euler12.bin

RabbitMQ基础概念详细介绍

不羁的心 提交于 2020-08-09 00:01:53
https://www.jianshu.com/p/e55e971aebd8 本文对 rabbitmq 基础介绍,完全是为了下一篇 rabbitmq 性能测试做准备,让读者去了解我们需要测试的是什么样一个“东西”。 引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。 消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。本文将要介绍的RabbitMQ就是当前最主流的消息 中间件 之一。 RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的 中间件 设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性

RabbitMQ学习-简单DEMO实现

回眸只為那壹抹淺笑 提交于 2020-08-08 20:54:56
介绍: RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间件之一。(官网: http://www.rabbitmq.com ) AMQP,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,同样,消息使用者也不用知道发送者的存在。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。   消息队列的使用过程大概如下:     (1)客户端连接到消息队列服务器,打开一个channel。     (2)客户端声明一个exchange,并设置相关属性。     (3)客户端声明一个queue,并设置相关属性。     (4)客户端使用routing key,在exchange和queue之间建立好绑定关系。   (5) 客户端投递消息到exchange。exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。     P: 为Producer,数据的发送方。     C:为Consumer,数据的接收方。     Exchange:消息交换机