关于为什么要使用LDAP去访问MQ, 而不是直接访问,其理由我就不啰嗦了,有兴趣的可以去Google下。最直接的原因有至少如下两条(欢迎补充):
1. 客户端不需要去记MQ的账号,密码,只要有一个LDAP目录的访问权限,其下面所有的资源都可以访问。
2. MQ躲在LDAP Server后面,可以随时变化,对客户端这种变化是透明的。
下面说下具体实施步骤,
1. 安装LDAP Server。 我使用的是OpenLDAP2.4.26 可以到官方网站下载。具体安装方法略,网上很多,推荐一篇http://blog.chinaunix.net/space.php?uid=20652253&do=blog&id=1906570。
如果想让其随机器自启动,可以在/etc/rc.local加入一行
su root -lc "/usr/local/openldap/libexec/slapd &"
2. 加入Java schema,
We must edit the slapd.conf file. After the line:
include /usr/local/etc/openldap/schema/core.schema
add the schema for java objects:
include /usr/local/etc/openldap/schema/java.schema
注意:
a. 具体在那个目录要看OpenLDAP的安装目录,以及其版本。
b. 必须要改下 java.schema, 否则会有错误 LDAP: error code 65 - object class 'javaContainer' requires attribute 'cn']
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.1
NAME 'javaContainer'
DESC 'Container for a Java object'
SUP top
STRUCTURAL
MUST cn )
用#号将“MUST cn )” 注释掉,用MAY ( o $ cn) )替换它
替换后类似以下内容:
objectclass ( 1.3.6.1.4.1.42.2.27.4.2.1
NAME 'javaContainer'
DESC 'Container for a Java object'
SUP top
STRUCTURAL
MAY ( o $ cn) )
3. 安装 Sonic MQ server。我装的是比较老的6.1, 官网可以下载。安装配置简单。Windows下就是Next, Next..
4. 增加一个object 到 LDAP Server, 我使用Java 代码做的,
import javax.naming.Context;
import javax.naming.NameAlreadyBoundException;
import javax.naming.directory.*;
import java.util.*;
public class MakeRootContext {
final static String rootCtx = "o=SonicMQ,dc=cyber,dc=com";
public static void main(String[] args) {
// set up environment to connect to LDAP
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://192.168.0.23:389/");
env.put(Context.SECURITY_PRINCIPAL, "cn=admin,dc=stony,dc=zhang");
env.put(Context.SECURITY_CREDENTIALS, "12345");
try {
// obtain initial directory context using the environment
DirContext initialctx = new InitialDirContext(env);
initialctx.createSubcontext(rootCtx);
} catch (NameAlreadyBoundException nabe) {
System.err.println(rootCtx + " has already been bound!");
} catch (Exception e) {
System.err.println(e);
}
}
}
5. 必须在Sonic MQ控制台,把ConnectionFaction,以及Destination注册到LDAP Server, 过程如下,
第一步:
第二步,
第三步:
6.最后,我们用代码验证一下。能通过LDAP得到ConnectionFactotry, 以及Queue, 并且能发送消息到MQ.
import java.util.Hashtable;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import progress.message.jclient.QueueConnectionFactory;
public class LDAPConnect {
public LDAPConnect() throws Exception {
// Obtain a JNDI connection
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL,
"ldap://192.168.0.23:389/o=SonicMQ,dc=stony,dc=zhang");
env.put(Context.SECURITY_PRINCIPAL, "cn=admin,dc=stony,dc=zhang");
env.put(Context.SECURITY_CREDENTIALS, "12345");
DirContext ctx = null;
try {
ctx = new InitialDirContext(env);
// Lookup a JMS connection factory
QueueConnectionFactory conFactory = (QueueConnectionFactory) ctx.lookup("cn=cltQCF");
QueueConnection connection = conFactory.createQueueConnection();
QueueSession session=connection.createQueueSession(true, 10);
Queue queue= (Queue)ctx.lookup("cn=wfacRCAccess");
QueueSender sender=session.createSender(queue);
Message msg = session.createTextMessage("test");
sender.send(msg);
session.commit();
connection.close();
System.out.println("connected");
// System.exit(0);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ctx != null) {
try {
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
try {
LDAPConnect simpleConnect = new LDAPConnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
检查MQ Server是否收到消息,
测试完成。
----------------------------------------------------------------------
张瑜,Mybeautiful, zhangyu0182@sina.com.
- 大小: 26.2 KB
- 大小: 17.1 KB
- 大小: 29.3 KB
- 大小: 23.1 KB
分享到:
相关推荐
全自动洗衣机PLC控制与智能交互系统:基于西门子S7-1200和TP700触摸屏程序的Z03实践(使用博途v15.1及IO表),题目二全自动洗衣机PLC控制西门子S7-1200和TP700触摸屏程序Z03,博途v15.1,带IO表 ,Z03全自动洗衣机; PLC控制; 西门子S7-1200; TP700触摸屏程序; 博途v15.1; IO表,全自动洗衣机PLC控制S7-1200与TP700触摸屏程序Z03(博途v15.1,带IO表)
617d773df6bb6cf9ae5ac5e95da7b096.part2
基于S7-200 PLC与组态王技术的分拣系统:大小球颜色、大小及材质的智能识别与控制,No.883 基于S7-200 PLC和组态王大小球颜色大小材质分拣 ,核心关键词:S7-200 PLC; 组态王; 大小球; 颜色; 大小; 材质; 分拣; 识别。,基于S7-200 PLC的组态王分拣系统:大小球颜色材质综合管理
基于距离调控的变频器加减速带参数子程序控制策略,根据距离控制变频器加减速带参数子程序。 可以根据设置的加速距离和减速距离输出变频器的输出频率。 ,核心关键词:距离控制;变频器;加减速带参数;子程序;输出频率。,基于距离控制的变频器加减速参数子程序
基于StyleGAN的草图到服装图像的生成方法.pdf
C#开发高效能3D点云可视化软件,支持CSV表格数据导入与渲染处理,使用C#语言开发的3D点云显示软件,以CSV表格格式读取 ,核心关键词:C#语言开发;3D点云显示软件;CSV表格格式读取;点云数据可视化。,C#开发的3D点云显示软件:CSV格式数据读取与展示
"基于机会约束规划理论的含可再生能源热电联供微网优化研究:考虑源荷不确定性的微网模型及其优化策略的复现与验证",考虑源荷不确定性的热电联考虑源荷不确定性的热电联供微网优化 复现《含可再生能源的热电联供型微网经济运行优化》,采用粒子群算法,采用机会约束规划理论出力源荷不确定性,采用概率方法来表达,目标函数代码完美复刻了文献中的目标函数和约束条件,约束部分采用清晰简明的等式和不等式部分,方便理解,采用罚函数的形式形成最终目标函数值。 本程序包括确定性模型和不确定性模型两部分程序代码,方便对照学习微网优化 ,核心关键词: 热电联供微网优化; 源荷不确定性; 粒子群算法; 机会约束规划理论; 概率方法; 目标函数; 约束条件; 确定性模型; 不确定性模型。,粒子群算法驱动的含源荷不确定性的热电联供微网优化程序
968a658a40c897eb4452d8718cf0f8e6.part2
B超技术:相控阵超声波的逐点与目标级聚焦策略——基于DAS算法与K-wave工具箱的应用研究,B超 算法 相控阵 超声波 逐点聚焦 目标级聚焦 DAS算法 K-wave工具箱 ,B超; 算法; 相控阵; 超声波; 逐点聚焦; 目标级聚焦; DAS算法; K-wave工具箱,"B超成像技术:相控阵超声波算法与DAS、K-wave工具箱的联合应用"
MATLAB仿真:Delta并联机器人的正逆运动学分析与Simulink及Simscape仿真研究,MATLAB仿真 delta并联机器人 simulink simscape仿真 正逆运动学 ,MATLAB仿真; delta并联机器人; Simulink; Simscape仿真; 正逆运动学,MATLAB仿真:Delta并联机器人正逆运动学分析的Simulink与Simscape应用
车辆路径智能优化算法:多维度策略与参数调整的物流配送研究,车辆路径智能算法包括如下: 1.遗传算法车辆路径优化 2.蚁群算法路径优化3.粒子群算法路径优化4.模拟 火算法路径优化 5.节约算法CW路径优化 6.人工鱼群路径优化。 节约算法车辆路径 遗传算法车辆路径,物流配送,带时间窗和载重量约束改进,vrp,cvrp ,vrptw物流配送,路径优化,车辆配送。 遗传算法路径优化,软时间窗,硬时间窗,客户满意度,物流选址,车辆路径,物流配送。 matlab完整代码,可修改坐标,需求和时间窗 和算法等相关参数。 ,核心关键词: 遗传算法车辆路径优化; 蚁群算法路径优化; 粒子群算法路径优化; 模拟退火算法路径优化; 节约算法CW路径优化; 人工鱼群路径优化; 物流配送; 车辆路径优化; 软时间窗; 硬时间窗; 客户满意度; 物流选址; MATLAB完整代码。,智能算法在车辆路径优化中的应用
matlab实现GA-BP时序预测完整程序+数据
基于特征的表面表达模型–体参数化模型转化方法.pdf
基于LSTM算法的换道轨迹预测:LC轨迹特征数据的MATLAB编码实现与解析,可用于LSTM道轨迹预测的LC轨迹特征数据 . MATLAB coding 道历史轨迹特征(i80,US101):横纵向速度,横纵向加速度,轨迹坐标,向左OR向右道标志,时间列,车辆id; ,LSTM; 轨迹特征数据; MATLAB coding; 换道历史轨迹; 横纵向速度; 横纵向加速度; 轨迹坐标; 车辆id; 车辆换道方向(向左OR向右); 时间列,LSTM换道轨迹预测:MATLAB代码与LC轨迹特征数据融合研究
基于OpenSees的梁柱节点建模与十字节点模拟分析:深入探讨JOINT2d与beamColumnJoint单元的应用,基于opensees梁柱节点建模 十字节点模拟 [1]采用JOINT2d节点单元或者element beamColumnJoint单元,采用Pinching4材料模型考虑核心区剪切行为和粘结滑移效应; 也可以使用hysteretic本构0长度单元模拟节点变形,2种代码均有。 [2]价格包括模型建模代码和1对1指导教学; [3]计算Pinching4材料的Membrane-2000小程序 梁端加载滞回代码 参考文献:基于OpenSees的装配式混凝土框架节点数值模拟方法研究-曹徐阳; ,核心关键词: OpenSees建模; 梁柱节点; JOINT2d节点单元; element beamColumnJoint单元; Pinching4材料模型; 核心区剪切行为; 粘结滑移效应; hysteretic本构0长度单元; 节点变形; 模型建模代码; 1对1指导教学; Membrane-2000小程序; 梁端加载滞回代码。,OpenSees梁柱节点建模:十字节点模拟与材料行为分析
中医院问诊系统 免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
LabVIEW与PLC数据通信:深入解析与程序源码实例,labview和PLC数据通信 程序源码 ,Labview; PLC数据通信; 程序源码,LabView与PLC数据通信的程序源码示例
基于三菱PLC与组态王技术的自动化立体车库堆垛书架控制系统研究与应用第1100例实践,No.1100 基于三菱PLC和组态王组态自动化立体车库控制堆垛书架 ,三菱PLC; 组态王组态; 自动化立体车库; 控制; 堆垛书架,基于三菱PLC与组态王控制的立体车库堆垛书架自动化系统
2024薪酬最高的十大专业(2025.01.30)
移相全桥DSP数字控制开关电源开发板:基于TMS320F28034主控的完整设计与资料包,移相全桥DSP数字控制开关电源开发板 主控TMS320F28034,提供原理图,详细功率计算书,设计说明书,bom等资料。 ,移相全桥;DSP数字控制;TMS320F28034主控;原理图;功率计算书;设计说明书;BOM资料;开关电源开发板,高级移相全桥DSP电源开发板,TMS320F28034主控全解析