amqp

才博教育:AI口语学习平台上云

淺唱寂寞╮ 提交于 2020-05-01 08:05:27
公司简介 北京才博教育科技有限公司自主开发了一套基于AI技术的口语学习工具,服务与英语教育机构。这套口语学习工具旨在于解决英语培训机构在传统英语教学中存在的会看、会写、不会说的问题,基于自主研发的AI人工智能技术,清晰的分辨学习者在英语学习过程中的薄弱点。发现学生学习过程中的问题,提高学习效率,提升学习成绩。 业务痛点 AI人工智能对GPU的显存和算力有一定要求,主要还是依赖GPU的算力。 对业务的可用性要求较高,需要一套安全机制防止服务器出现故障导致业务不可用的问题。 解决方案 GN6V100,单块显卡16G的显存满足我们的业务需要,同时CPU与内存保持最佳的1:8比例,CPU和内存资源也不会过剩,多台GPU服务器组成AI集群,满足同时处理大量发音的训练需求。 SLB加上多台普通ECS组成业务集群,对外提供服务。满足业务的高可用,避免出现单点故障,业务数据存放在NAS中,保证所有ECS和GPU数据的一致性。 云数据库RDS、MongoDB满足数据的持久化存储需求,Redis缓存用户的登录信息和其它的高热数据,并且都可以随着业务的发展灵活的变配。 上云价值 通过云分期节省我们的整体上云成本。 云资源的弹性灵活部署可以在很大程度上满足业务在不同阶段的需要,后期也可随着业务的拓展再升级规格。 相关产品 弹性公网IP(EIP) 独立的公网IP资源

RabbitMQ各协议异同详解

徘徊边缘 提交于 2020-05-01 01:14:01
一、官网介绍 Which protocols does RabbitMQ support? RabbitMQ supports several messaging protocols, directly and through the use of plugins. This page describes the supported protocols and helps differentiate between them. AMQP 0-9-1, 0-9 and 0-8, and extensions RabbitMQ was originally developed to support AMQP . As such this protocol is the "core" protocol supported by the broker. All of these variants are fairly similar to each other, with later versions tidying up unclear or unhelpful parts of earlier versions. We have extended AMQP 0-9-1 in various ways. AMQP 0-9-1 is a binary protocol, and

RabbitMq 发送消息时,同时接受返回数据

佐手、 提交于 2020-04-30 23:13:55
生产者代码,注意要设在将返回数据放入的队列; 通过这种方式可以实现同步阻塞,从而得到返回数据 package com.boot.springbootnew.component; import com.alibaba.fastjson.JSON; import com.boot.springbootnew.config.ReturnComponent; import com.boot.springbootnew.pojo.MqFailLog; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.support.CorrelationData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework

SpringBoot+RabbitMQ学习笔记(一)

拈花ヽ惹草 提交于 2020-04-29 12:36:15
一丶添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 配置文件:application.properties server.port=8883 spring.application.name =hello- world spring.rabbitmq.host = localhost spring.rabbitmq.port =5672 spring.rabbitmq.username = guest spring.rabbitmq.password =guest

SpringBoot+RabbitMQ学习笔记(二)使用RabbitMQ的三种交换器之Direct

穿精又带淫゛_ 提交于 2020-04-29 12:35:58
一丶简介 Direct Exchange 处理路由键。需要将一个队列绑定到交换器上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换器上要求路由键 “test”,则只有被标记为“test”的消息才被转发,不会转发test.aaa,也不会转发dog.123,只会转发test。 业务场景,系统日志处理场景: 1.微服务产生日志,交给日志服务器处理。 2.日志服务器一共有4个服务,分别问DEBUG、INFO、WARN、ERROR(这里只写两个INFO和ERROR)。 3.服务之间的通信采用Direct(发布订阅)。 二 丶配置文件 我分别创建了两个项目,一个作为生产者来发送日志,一个作为消费者来接收日志。 生产者配置: 1 server.port=8883 2 3 spring.application.name=hello- world 4 5 spring.rabbitmq.host= localhost 6 spring.rabbitmq.port=5672 7 spring.rabbitmq.username= guest 8 spring.rabbitmq.password= guest 9 10 #设置交换器名称 11 mq.config.exchange= log.direct 12 #info的路由键 13 mq.config.queue

SpringBoot+RabbitMQ学习笔记(三)使用RabbitMQ的三种交换器之Topic

六月ゝ 毕业季﹏ 提交于 2020-04-29 09:33:48
一丶简介 Topic Exchange 将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。因此“audit.#”能够匹配到“audit.irs.corporate”,但是“audit.*” 只会匹配到“audit.irs”。 业务场景: 1.日志服务器记录用户服务、商品服务、订单服务三个服务。 2.日志服务器有三个日志服务:INFO日志处理服务、ERROR日志处理服务、全日志处理服务。 3.使用Topic交换器处理日志,匹配规则依次为:*.log.info、*.log.error和*.log.*。 二丶配置文件 还是创建两个项目,一个作为生产者一个作为消费者。 生产者配置: server.port=8883 spring.application.name =hello- world spring.rabbitmq.host = localhost spring.rabbitmq.port =5672 spring.rabbitmq.username = guest spring.rabbitmq.password = guest spring.thymeleaf.cache = false 设置交换器名称 mq.config.exchange =log.topic View Code 消费者配置: server

SpringBoot学习之路---短博客搞懂消息队列是个啥(仅入门)

血红的双手。 提交于 2020-04-28 19:36:52
大家在学习过程可能经常会看到"消息队列"、“RabbitMQ”、"Kafka"等等这些词。反正我关注的挺多公众号会推送这些的相关文章,但是还没有到那种应用场景,所以就没有去额外关注。最近刚刚好学习了一些有关消息队列的知识,就来记录一下 消息队列是个啥 消息队列其实是一个消息的容器。它的底层是一个队列(Queue)的数据结构,它满足先进先出的原则。也就是说先进来的消息先出去,后进来后出去。这样消息被消费时,大致有个顺序可言。 基于消息队列的架构大致是这样的,浏览器发出某个请求,由 生产者 生成 消息 ,并进入到消息队列中,等待 消息接受者 来接受并处理。在等待的过程中,先把结果先返回给浏览器(比如注册账户时,先把消息放入消息队列中,然后把"注册成功"的消息返回给浏览器),而不是先处理它。在 消息接受者 接受消息后,编写相应的程序去处理它,最后如果有需要再把这个处理结果放到消息队列,等待别的 消息接受者 进行二次处理。 消息队列的各个概念解释 消息发送者(publisher) :也叫做消息生产者,是消息发送的源头 消息接受者(consumer) :接受消息并进行处理的程序,也叫做消息的消费者,它们在处理完消息 消息代理(message broker) :当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定 目的地 。 目的地(destination) :顾名思义

Django2.0 + Celery 3.125 实现定时任务

老子叫甜甜 提交于 2020-04-28 05:55:51
Django 2.0 + Celery 3.1.25 定时(周期)任务 1.目的   最近根据项目需要,希望在django框架下实现一些定时任务功能   此为demo示例, 简单的做每5s 实现 'hello world' 的打印   踩过一些坑,最终还是顺利完成了配置。 2.基建   使用的包:[django==2.0, django-celery==3.2.2, celery==3.1.25]   创建Django项目 以及相关app   在新建的app目录下 添加tasks文件夹   在settings.py所在同级目录 新建 celery.py C:. │ celery │ db.sqlite3 │ manage.py │ requirements.txt │ ├─app_name │ │ admin.py │ │ apps.py │ │ models.py │ │ tests.py │ │ views.py │ │ __init__ .py │ │ │ ├─migrations │ │ │ __init__ .py │ │ │ ├─tasks │ │ │ timer_job.py │ │ │ __init__ .py │ ├─project_name │ │ celery.py │ │ settings.py │ │ urls.py │ │ wsgi.py │ │ _

Django 学习之Celery(芹菜)

六月ゝ 毕业季﹏ 提交于 2020-04-28 05:08:34
Celery 介绍 文档:http://docs.celeryproject.org/en/latest/index.html Celery 是一个功能完备,即插即用的异步任务队列,可以独立于主进程运行,在主进程退出后,也不影响队列中的任务的执行。 任务执行异常退出,重新启动后,会继续执行队列中的其他任务,同时可以缓存停止期间接收的工作任务,这个功能依赖于消息队列(RabbitMQ, Redis等) Celery 特点 简单,易于使用和维护,有丰富的文档 高效,单个Celery 进程 每分钟可以处理数百万个任务 灵活,Celery 种几乎每个部分都可以自定义扩展 Celery 非常易于集成到一些Web开发框架中 Celery角色 Celery clinet: 这是任务生产者,它负责将任务(tasks)发送到broker中 Broker:b roker 负责将任务分发给响应的Celery worker Celery worker: 这是任务的执行者,完成相应的业务逻辑,在具体实现上体现为Python 函数 实现过程 Celery 通过消息进行通信,通常使用一个叫broker(中间人)来协作client(任务的发出者)和worker(任务的处理者),client 发出消息到队列中,broker将队列中的消息发给worker 来处理

RabbitMQ几个常用面试题

梦想与她 提交于 2020-04-28 04:37:28
原文来自: https://www.cnblogs.com/woadmin/p/10537174.html 1、什么是RabbitMQ?为什么使用RabbitMQ? 答:RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的,消息中间件; 可以用它来:解耦、异步、削峰。 2、RabbitMQ有什么优缺点? 答:优点:解耦、异步、削峰; 缺点:降低了系统的稳定性:本来系统运行好好的,现在你非要加入个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性会降低; 增加了系统的复杂性:加入了消息队列,要多考虑很多方面的问题,比如:一致性问题、如何保证消息不被重复消费、如何保证消息可靠性传输等。因此,需要考虑的东西更多,复杂性增大。 3、如何保证RabbitMQ的高可用? 答:没有哪个项目会只用一搭建一台RabbitMQ服务器提供服务,风险太大; 4、如何保证RabbitMQ不被重复消费? 答:先说为什么会重复消费:正常情况下,消费者在消费消息的时候,消费完毕后,会发送一个确认消息给消息队列,消息队列就知道该消息被消费了,就会将该消息从消息队列中删除; 但是因为网络传输等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将消息分发给其他的消费者。 针对以上问题,一个解决思路是:保证消息的唯一性,就算是多次传输