RabbitMQ消息分发轮询和Message Acknowledgment
一、消息分发RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费。多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。启动3个消费者生产者依次生成3条消息可见3条消息分别被3个消费者获取,所以RabbitMQ是采用轮询机制将消息队列Queue中的消息依次发给不同的消费者二、消息确认(MessageAcknowledgment)在实际应用中,可能会发生消费者收到Queue中的消息,但没有处理完成就宕机(或出现其他意外)的情况,这种情况下就可能会导致消息丢失。为了避免这种情况发生,我们可以要求消费者在消费完消息后发送一个回执给RabbitMQ,RabbitMQ收到消息回执(Messageacknowledgment)后才将该消息从Queue中移除;如果RabbitMQ没有收到回执并检测到消费者的RabbitMQ连接断开,则
ActiveMQ快速入门
图1ActiveMQ目录结构图1中,各目录功能说明如下。bin:存放ActiveMQ运行相关脚本。conf:存放ActiveMQ配置文件。data:存放ActiveMQ运行时数据,比如日志。docs:存放ActiveMQ入门指导文档。examples:存放基于各消息传递协议,使用ActiveMQ实现消息传递的demos。lib:存放ActiveMQ相关jar包。其余目录及文件见名知意,此处不赘述。3.启动ActiveMQBroker。运行bin下的activemq脚本即可。4.访问ActiveMQWebUI界面。本文是http://localhost:8161,默认username和password都是admin。登录后,UI界面如图2所示。图2ActiveMQWebUI写代码ActiveMQ客户端支持多种语言,本文基于Java实现。其实网上有一大堆代码可参考,然而其中有太多的样板式代码(boilerplatecode),这是我最讨厌的。1.新建mavenproject,pom中加入以下依赖。
码农必备套件
三、APIExplorer专业用来针对开发者开发过程中进行API调试的工具,真可谓替开发哥哥们节省了不少约会时间。阿里云APIExplorer致力于为开发者提供所见即所的,快速便捷的API调用方式,目前已接入14款重要云产品线。使用APIExplorer可以有效提升开发者在API试用和调试过程的效率,传统自己写代码进行API试用和调试,至少花费一天时间,但使用APIExplorer,最多不超过半小时。APIExplorer的四大功能1、API快速检索打开APIExplorer,通过左侧的搜索框,支持模糊查询,可以快速定位到想要试用的API:2、所见即所得的API在线调试在APIExplorer中,无需创建AK、搭建环境、编写代码,只需要填写参数,然后点击发送请求,即可在线对API进行试用和调试,并即时返回结果。(注:APIExplorer直接对线上资源进行操作,请确认无误后发送请求)3、同步生成SDKDemo代码开发者无需自己编写Demo代码。在填入参数的同时,APIExplore
Swagger2 Zuul 整合
Swagger2Swagger2是一个RESTful接口进行描述和展示的工具,可以通过springfox-swagger2整合,生成相应的文档,需引入两个库:
10位技术领袖告诉你趟过的微服务那些坑和最佳实践
小数导读:切换到微服务架构似乎很容易,但技术领导者往往低估了项目的复杂性,并犯下灾难性的错误。此文对来自以色列和美国等5个国家的技术领袖进行了13次采访。这篇文章很长,内容包括如下一些方面:•微服务是什么•微服务架构优劣势分析•微服务面临的挑战和应对解决方案•微服务落地要避开的坑•来自技术领导型企业的微服务架构最佳实践•如何选择微服务当中的技术栈?•实用的技术建议为什么转向微服务?企业容易犯的最大错误是在没有明确目标的情况下,转向微服务架构。需要了解并有真正的理由表明为什么要这样做。“人们盲目进入很多领域:Docker很酷,微服务很伟大!但它可能不适合你的体系构建,你需要了解为什么要这么做。”-来自StevenMcCord,ICXMedia(一家企业营销视频制作众包平台)创始人兼CTO。如果你的系统工作正常,那有什么动力去改变它?如果只是因为微服务被炒作,这并不意味着你需要跳入潮流。它不一定是企业软件的最佳技术选择。“确定原因至关重要。”这是DavidDawson
配置中心一团糟?Hawk微服务化改造切合企业系统需求
微服务近年来炙手可热,如果在后端服务领域诸多热门技术趋势中,比如容器、微服务、DevOps等,找出一个最火的方向,那么非微服务莫属。微服务架构通过有效拆分应用,解耦系统,提供更好的软件伸缩性和企业的敏捷性,实现敏捷开发和部署。它不是一种横空出世的技术,事实上微服务microservice的概念已经存在多年,一度曾是软件开发的宠儿。近年来被越来越多的企业和开发人员所推崇,并在互联网企业当中大量落地。一些有代表性的传统行业通过实施微服务架构,提高业务灵活性,加速业务需求变化和响应。微服务化作为一个体系,包括开发框架、以及周边配套工具链,比如服务治理、配置中心、安全管理、与容器的结合、监控管理等等。往往,围绕微服务的管理体系是微服务搭建的难点所在。接下我们就谈谈配置中心的架构与实战。1为什么需要配置管理中心首先,我们的观点是,每一个稍微有点规模的分布式系统,都应该有一个统一配置中心。当今的系统,随着系统的复杂度增加,配置也日益增多,随着devops等概念的推广,人们对配置的期望值也越来越高:期望配置修改后实时地生效,期望支持灰
JeeSite如何正确连接SQL SERVER 数据库
JeeSite如何正确连接SQLSERVER数据库jeesite介绍感谢jeesite项目的作者thinkgem。没有你我也不会更改这数据源非了恁大的劲,,,,嘻嘻嘻说多了。JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源JavaEE快速开发平台。JeeSite是您快速完成项目的最佳基础平台解决方案,JeeSite是您想学习Java平台的最佳学习案例,JeeSite还是接私活的最佳助手。JeeSite是在SpringFramework基础上搭建的一个Java基础开发平台,以SpringMVC为模型视图控制器,MyBatis为数据访问层,ApacheShiro为权限授权层,Ehcahe对常用数据进行缓存,Activit为工作流引擎。是JavaEE界的最佳整合。服务器中间件:在JavaEE5规范(Servlet2.5、JSP2.1)下开发,支持应用服务器中间件有Tomcat6+、Jboss7+、WebLogic10+、WebSphere8+。
前端三大框架(vue,angular,react)大杂烩
摘要:从angular的诞生独步天下,到现在三大框架平分天下,基本形势已经趋于稳定。每一个框架从诞生到受欢迎,都有其特定的原因和背景。不同的开发者选择时,也是依据于其特定情景下的原因和背景。一、为什么前端会被vue,angular,react瓜分?不知道大家有没有发现,这三个框架除了都是前端框架之外,还大有搞基的成分存在。注意他们三个的名字,分别以v,a,r开头,我这么一说,你是不是忽然间就想到了什么。哈哈,正是如此,将他们组合起来不就是javascript中无处不在的鬼东西么?var(当然纯属于开玩笑的)var关键字,是js的变量声明关键字,可以说,它是js得以运行的核心关键字,因为要想一段代码运行,首先得有各种变量和逻辑判断做支撑,而在es6之前,js能声明变量的,就它一个。这似乎也是暗示了vue,angularjs,react这三个框架的不可替代性啊,也不知道当时这三个框架的作者起名时的想表达的特殊含义是什么,但偏偏就刚好对上了。当然,反过来说,也有可能是起var关键字的这个人,当时考虑得面面俱到。虽然看上去是巧合,但我总感觉这之中
vue+node开发的一个博客,欢迎大家一起来交流!
vue-node-blogvue-node-blog描述一个练手的vue+node的博客,实现的功能有:发文章、修改文章、文章的喜欢及收藏、关注用户、评论及二级评论、评论点赞、历史记录、我的文章、修改个人资料、一些删除功能等,登录、注册,以及接入了github第三方登录,并抓取了一些掘金的文章,方便看效果第一次发的小项目,不足之处以及写的不好的地方,欢迎大家提出来,一起交流!觉得好的话,也欢迎star!因为用是国外的服务,所以获取数据的时会慢一点。线上地址:https://vue-node-blog.herokuapp.comgithub地址:https://github.com/Kim09AI/vue-node-blog技术栈vue、vue-router、vuex、stylus、ES6、nodejs、express、mongodb、Ajax使用axios(前后端共用)运行开发模式需全局安装supervisor和cross-env在项目根目录npminstall启动mongodb再进入server运行npmrund
weex踩坑之旅第四弹 ~ weex页面布局(定位布局)
习惯了web页面的开发一开始还真不太适应weex的写法,css有很多限制。不过时间长了感觉也可以,限制多,用的少,需要研究的东西也就少。对于weex的页面布局,我觉得有以下需要注意的点1.盒子模型官方说的很明白,我这边再提示一下:Weex盒模型的box-sizing默认为border-box,即盒子的宽高包含内容、内边距和边框的宽度,不包含外边距的宽度。css样式目前不支持速写形式,例如:border:1solid#ff0000;的组合写法,在书写的时候需要单独设定。2.定位布局Weex支持position定位,用法与CSSposition类似。为元素设置position后,可通过top、right、bottom、left四个属性设置元素坐标。position的取值可以为:relative、absolute、fixed、sticky。定位布局的细节我在这里不赘述,如果需要了解,可以自行google,我这里只是说明应该在什么场景下使用定位布局。3.为元素设定高度由于代码最终运行的终端不一定,
CSS 实现元素较宽不能被完全展示时将其隐藏
遇到一个需求,需要实现的样式是固定宽度的容器里一排显示若干个标签,数量不定,每个标签的长度也不定。当到了某个标签不能被完全展示下时则不显示。大致效果如下,标签只显示一排,多了放不下了就不显示了。标签部分DOM结构如下
2017 年 7 月:15 个有趣的 JS 和 CSS 库
{"debug":false,"apiRoot":"","paySDK":"https:\u002F\u002Fpay.zhihu.com\u002Fapi\u002Fjs","wechatConfigAPI":"\u002Fapi\u002Fwechat\u002Fjssdkconfig","name":"production","instance":"column","tokens":{"X-XSRF-TOKEN":"2|2ef7f73c|4fd8b25de5761ee8d0d9d79e58b9ce09|1514426196","X-UDID":null,"Authorization":"oauthc3cef7c66a1843f8b3a9e6a1e3160e20"}}
vue-router扩展实践
我们希望使用vue-router去做什么?在最近的项目中,我们基于vue全家桶建立一个H5WAP版项目,我们对该项目有几点设想:能够直接嵌入多个APP,作为HybridAPP;简单化的跳转;运营配置通用化。Hybrid虽然这是一个H5WAP项目,但部分页面会嵌入到APP里面,同一个页面H_0的点击按钮跳转需要同时兼容两种情况:WAP:H_0-->H_1页面H_0点击按钮跳转到页面H_1Hybird:H_0-->A_1页面H_0点击按钮跳转到APP的A_1模块简单化的跳转简单化,即没有额外的学习成本就能够使用。目前使用MVVM框架搭建的项目,几乎都会使用路由库Router来完成管理页面的切换,Vue同样也拥有官方Vue-Router的支持,所以,我们希望能够保持和Vue-Router的导航API(push、replace、go)一致的调用方式。运营配置通用化项目中的模块跳转是通过管理后台配置,例如首页的九宫格菜单,运营人员会配置不同模块的组合和跳转地址,在APP里面,这个跳转地址是基于sch
canvas绘制放射性渐变
canvas有些地方还是有点坑的,比如fillRect是方法不是属性,如果写成fillRect=这样是没效果的,而且还不报错....这里用到了createRadialGradient这个API这个API接收6个参数,前三个表示底下的圆,后三个表示上面的圆,返回的实例依然可以用addColorStopcan2_context是getContext的canvas绘图上下文环境functionRadia(bottom_x,bottom_y,bottom_r,top_x,top_y,top_r){this.bottom_x=bottom_x;this.bottom_y=bottom_y;this.bottom_r=bottom_r;this.top_x=top_x;this.top_y=top_y;this.top_r=top_r;this.gradient=can2_context.createRadialGradient(this.bottom_x,this.bottom_y,this.bottom_r,this.top_x,this.top
改造vue-quill-editor: 结合element-ui上传图片到服务器
需求概述vue-quill-editor是我们再使用vue框架的时候常用的一个富文本编辑器,在进行富文本编辑的时候,我们往往要插入一些图片,vue-quill-editor默认的处理方式是直接将图片转成base64编码,这样的结果是整个富文本的html片段十分冗余,通常来讲,每个服务器端接收的post的数据大小都是有限制的,这样的话有可能导致提交失败,或者是用户体验很差,数据要传递很久才全部传送到服务器。因此,在富文本编辑的过程中,对于图片的处理,我们更合理的做法是将图片上传到服务器,再将图片链接插入到富文本中,以达到最优的体验。废话不多说,接下来直接看如何改造改造分析查阅网上的资料,我感觉提供的方案都不是特别友好,网上搜索的基本都是这一个方法配合element-ui实现上传图片/视频到七牛或者是直接重新写一个按钮来进行自定义图片操作坦白讲,上面这2个方法都很特别,也的确有效果,但是我个人还是觉得不完美,第一个方法写得太麻烦,第二个方法有点投机取巧。结合上面两种方法以及官方的文档,我这里提供一个新的改造思路给大家参考。引入eleme
vue入坑笔记(持续更新)
一、代码分割,让页面按需加载,加快首屏速率vue.js构建单页应用虽然能通过路由来实现多页面效果,但是实际上打包后所有的代码都只有一个入口文件app.bundle.js,当项目变得十分庞大的时候,app.bundle.js文件就会非常大,而且用户没有访问到的页面代码也包含在其中,使得首页加载时间延长,非常影响性能和用户体验。如果我们能把不同路由对应的组件分割成不同的代码块,只在路由被访问的时候才加载对应的组件,这样就更加高效了。这样会大大提高首屏显示的速度,但是可能其他的页面的速度就会降下来。结合Vue的异步组件和webpackdecodesplittingfeature,我们就轻松实现路由组件的懒加载。方法很简单,只需要在路由配置中改变模块的引入方式,比如未修改的index模块引入是这样的:importIndexfrom'components/index/index'修改后(其他路由引入类似):constIndex=(resolve)=>{import('components/index/index'
ASP.NET Core 一步步搭建个人网站(3)_菜单管理
上一章,我们实现了用户的注册和登录,登录之后展示的是我们的主页,页面的左侧是多级的导航菜单,定位并展示用户需要访问的不同页面。目前导航菜单是写死的,考虑以后菜单管理的便捷性,我们这节实现下可视化配置菜单的功能,这样以后我们可以动态的配置导航菜单,不用再编译发布网站程序了。增加后台管理模块第1步,左侧导航菜单中,添加后台管理模块,用作管理员登录后,可以进行一些后台管理的操作,当然,目前还没有权限控制(后期加入),所以对所有用户可见。大概菜单结构如下:有了菜单项,我们还需要控制视图的跳转,所以,接下来需要写对应的控制器和视图。为了将相关功能组织成一组单独命名空间(路由)和文件夹结构(视图),解决方案中右键添加区域(Area),取名后台管理(Configuration),代表后台管理模块,.NetCore脚手架(scaffold)自动帮我们实现了目录划分:控制器(Controllers)、模型(Models)、视图(Views)菜单模型定义菜单的基本属性有:菜单名称、菜单类型、菜单的图标样式、菜单url路径。另外,菜单在逻辑上是树
MVC系列——一个异常消息传递引发的思考
MVC系列——一个异常消息传递引发的思考前言:最近在某个项目里面遇到一个有点纠结的小问题,经过半天时间的思索和尝试,问题得到解决。在此记录一下解决的过程,以及解决问题的过程中对.net里面MVC异常处理的思考。都是些老生常谈的问题,不多说,直接上“主菜”。本文原创地址:http://www.cnblogs.com/landeanfen/p/8135844.html一、问题重现项目是一个传统.netframework的MVC项目,为了简便,项目里面定义了一个自定义异常类用于向客户端传递错误消息,客户端接收到异常的消息时在浏览器里面弹出提示。先来看看这个自定义异常类CustormerException的定义publicclassCustomerException:System.Exception{publicCustomerException(){}publicCustomerException(stringmessage):base(message){}publicCustomerException(string
weex踩坑之旅第五弹 ~ 使用navigator内置模块实现导航
目前,我个人认为在weex中实现页面跳转的方式有两种,一种是通过weex提供的navigator模块,一种是通过vue-router之类的第三方插件。这两种方式在开发过程中都需要。那么什么时候采用navigator,什么时候采用路由?可以根据开发需求来决定,底部导航可以使用使用路由。页面中特殊功能,比如个人设置,添加地址等功能可以使用navigator。那么这两种方式如何共存于代码中,需要修改webpack.config.js配置文件,具体做法我们在后面的综合项目中讨论。本章只讨论navigator1.初始化weex项目由于navigator跳转需要多个jsbundle,之前我们使用的具有引导文件的单入口文件将不能实现。所以需要通过weexinit命令初始化一个新项目。#初始化项目$weexinitnavigator#安装npm依赖$cdnavigator$npminstall#安装本地环境$weexplatformaddios$cdplatforms/ios$podinstall
vue-swiper 基于Vue2.0开发 轻量、高性能轮播插件
vue-swiper基于Vue2.0开发,基本满足大部分功能轻量、高性能轮播插件。目前支持无缝衔接自动轮播、无限轮播、手势轮播打包之后只有8.2KB大小性能还是杠杠滴demo如果觉得好用,给一个star哦~~~项目地址Installnpmivue-swiper-component--savecnpmivue-swiper-component--save//国内镜像Usageimport{Swiper,Slide}from'vue-swiper-component';components:{Swiper,Slide}//异步加载轮播图的情况<Swiperv-if="list.length>0"><Slidev-for="(tag,key)inlist":key="key"></Slide></Swiper>//同步加载轮播图情况&l