-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MSMQ配置说明 #92
Comments
InstallHelper 类里面的 SetupMessageQueue() 函数有修改。
请测试一下。建议用 dp2libraryxe 测试即可。dp2libraryxe 菜单“工具/为 library.xml 首次配置 MQ 参数”。注意加上 Ctrl 键作用是移除 MQ 相关参数。 测试时候需从源代码中找出这个函数,根据函数中涉及到的元素和属性名进行测试。 测试要点:
|
对话:后面有精力再测types属性为空 或 值为空的情况 数字平台谢* 数字平台任** 2018/5/4 21:49:03
表示没有设置消息类型
嗯,属性不存在默认值是dpmail,email;属性值为空是没有设置消息类型 2018/5/4 23:00:11
本来应该是这样的。但旧版本的代码有问题,这个还不能确保。我今天修改了代码,应该好一点了,后面找机会测试。可能需要制造一些案例用源代码跟踪进去测试。(因为通过最后是否发送了消息来判断测试结果,链条太长了)。或者说这里需要单元测试。 这些细节比较深了。后面开发 dp3 的时候,我们最好用不弱于这个强度的编码和测试精神去开发,确保一开始系统的质量就是好的。在结对编程的情况下,可以安排一个人专门去推敲这些细节,并且在项目早期就写好技术 wiki 和安排单元测试。 项目一般都面临很大的“发布”压力,各方面都要求产品赶紧出来。但项目组内部是知道产品质量到底如何的,直觉肯定有。要做到不欺骗自己,如果感觉不行,就放慢一点节奏,把焦点聚集到一个一个这样的细节上面,夯实产品内部。实际上是为自己良心开发,不是为了敷衍客户。 一般来说,质量较好,推敲较多的代码,也经得起后期的需求修改。更容易变化。因为考虑的细节比较深入比较扎实,里面肯定是花了不少精力去思考边界,思考合理性问题。 如果人力充沛了,对“遗产”代码也可以重新花精力看看,能够慢慢重构。重构以前先搞好分析和单元测试。其实遗产系统里面的函数库,拆散了完全是可以用到新项目里面的。所以这里实际上也是可以节省精力的。看你从什么角度去看这些问题。 数字平台任** 2018/5/5 6:51:18
嗯,我先把 关于types属性不存在和值为空 这个事记到issue,有时间了再进一步测试。 |
用标准版服务器测试 初始安装完成后,各个节点的情况如下: 与xe版本不同的是
自动配置MSMQ参数后,结果如下,正确
按ctrl+自动配置MSMQ参数,取消配置,结果如下,正确
|
关于MSMQ中队列的帐户权限谢老师,再反馈个问题,单机版对应的队列,有自己的帐户,可以手动删除。 标准版服务器实例 对应的消息队列,安全里只有everyone,system,anonymous login,没有像单机版对应实例的 renyh那个帐户,没法手动删除。 数字平台谢 2018/5/4 17:53:19
标准版是 Windows Service 模块。记住用“服务”打开 library service 属性看看,这个 service 是 local system 账户! 谢*:
单机版 dp2libraryxe.exe 也是以 Administrator 身份运行的。dp2libraryxe.exe 启动的时候有个 UAC 对话框,做了一次提权。但这个单机版它操作 MSMQ 有没有权限障碍,是不是要给 (Windows) MQ对象添加什么自己的权限,我记不清楚了,可能要查一下代码 InitialMsmq() 这个函数里面注释很清楚,可以看看它做了哪些事情 // 当前用户已经是 LocalSystem 了,需要额外给 Everyone 添加权限,以便让 dp2Capo 的控制台方式运行能访问这个 Queue // 如果当前是 Administrator,表示可能是 dp2libraryxe 启动的方式,那么需要专门给 LocalSystem 操作 Queue 的权限,以便 Windows Service 方式的 dp2Capo 能访问 Queue 记得这些地方当时编程和测试的时候还是满费劲的 之所以做成 library.xml 里面随时配置了队列对象名,启动实例时候就自动去创建队列对象(如果不存在的话),主要是考虑到兼容以前的老用户的环境。因为对这些用户,早已错过了安装环节,不太可能要求他们再走一遍添加了创建队列对象的安装环节。所以等于是安装要做的事情下放到平时了。 任 补充:注意这里不是说library.xml配置后就立即创建队列,而是dp2library实际启动时创建队列。 这种开发思路是比较野蛮的,对开发者要求高一些,对用户要求低一些。实际上也是满足敏捷开发发布的需要,你面对的是一个复杂混乱的用户运行环境。类似于互联网公司做网站那种思路,而不是做应用软件的思路
这个,有点怎么说呢。你添加队列对象比较容易,删除起来比较麻烦。因为 MQ 对象里面可能有残余的信息。如果是系统管理员手痒随便修改一下 library.xml 文件,你就把对应的 MQ 对象删除了,可能风险比较大。我是选择不删除它。当然如果是 dp2installer 确定要卸载一个实例了,那这个时候应该删除 MQ 对象,后面我记着加一下这个动作
嗯,是有这个问题。当时我测试时候怎么删除的,我也记不清了。用 Service 模块自己解决删除是最好的 dp2libraryxe 在卸载的时候,我也故意没有删除“用户目录”。用户目录里面存有 SQLite 的数据库文件。兴许用户误操作了以后咨询我们,还能找回来数据。 用户目录的位置,和 Windows 登录时候的账户关联,应该是当前 Windows 用户才能访问,基本上没有安全性(隐私)担忧,从逻辑上来说的话 |
如何删除一个Queue?如果是dp2library的Windows Service模块自动创建的队列,则一般的MMC控制台删除不了这样的队列。可用下面方法删除: 1)安装psexec工具: 2)用Administrator身份启动一个Windows命令提示符,然后到上述安装目录, 3)在这个特殊的Windows命令提示符窗口中,到Windows系统目录打开计算机管理控制台: |
(有两种方法启用MSMQ组件。
第一种是在打开 控制面板/程序与功能,点击左上方的 启用或关闭windows功能,找到microsoft Message Queue,勾选MSMQ的服务组件。)
第二种是在dp2installer程序中,点击菜单下的library/工具/启动MSMQ。
通过dp2install安装msmq不一定能成功,如果安装成功应该如下
MSMQ(微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中;本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理。
dp2系统发送微信公众号信息和验证码的过程是:dp2Library服务器将消息发送到MSMQ消息队列,这些消息暂存在MSMQ消息队列里面,然后这些消息被dp2capo发送出去。当dp2capo发送了消息之后,存储在MSMQ消息队列里面的消息相应减少。
如何查看消息队列里有没有信息:
在服务器上点windows菜单图标-向下箭头-从中点【计算机管理】-【服务和应用程序】-【消息队列】-【专用队列】,如下图,
如果某个实例中有消息未发出,该实例名称会出现在【专用队列】一栏。消息全部发送出去之后,就不会出现在这里。
存储在服务器消息队列里的消息是会占用一定空间的。特殊地,如果dp2capo因为某种原因断网,从dp2Library传送到消息队列里的消息就会一直保存着,发送不出去,这样占用的空间就会越来越大。这在维护dp2capo过程中需要特别注意。
The text was updated successfully, but these errors were encountered: