要通过JNDI设置ActiveMQ连接用户名和密码,您需要执行以下步骤:
首先,确保您的ActiveMQ服务器已经正确安装并运行。然后,编辑ActiveMQ的配置文件activemq.xml
,通常位于conf
目录下。
在<broker>
标签内添加以下内容,以定义JNDI资源:
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
...
<plugins>
...
</plugins>
<jndiContext>
<resource-ref>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<res-ref-name>ConnectionFactory</res-ref-name>
<res-type>org.apache.activemq.ActiveMQConnectionFactory</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</jndiContext>
...
</broker>
在<plugins>
标签内添加以下内容,以配置连接工厂:
<bean id="connectionFactory" class="org.apache.activemq.jndi.JNDIReferenceFactory">
<property name="jndiName" value="ConnectionFactory"/>
</bean>
创建一个名为jndi.properties
的文件,通常位于conf
目录下。在此文件中,定义JNDI资源的属性:
java.naming.factory.url.pkgs=org.apache.activemq.jndi
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
connectionFactoryNames=ConnectionFactory
如果您需要使用连接池,可以在conf
目录下创建一个名为context.xml
的文件,并添加以下内容:
<Context>
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="db_username" password="db_password" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/testdb"/>
<Resource name="ConnectionFactory" auth="Container" type="org.apache.activemq.ActiveMQConnectionFactory"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
description="JMS Connection Factory"
brokerURL="tcp://localhost:61616"
userName="amq_username" password="amq_password"/>
</Context>
在您的Java代码中,使用JNDI查找连接工厂,并创建连接:
import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class JNDIExample {
public static void main(String[] args) {
try {
// 初始化JNDI上下文
Context context = new InitialContext();
// 查找连接工厂
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
// 创建连接
Connection connection = connectionFactory.createConnection("amq_username", "amq_password");
// 创建会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建目标
Destination destination = session.createQueue("TestQueue");
// 创建生产者
MessageProducer producer = session.createProducer(destination);
// 创建消息
TextMessage message = session.createTextMessage("Hello, ActiveMQ!");
// 发送消息
producer.send(message);
// 关闭资源
producer.close();
session.close();
connection.close();
} catch (NamingException | JMSException e) {
e.printStackTrace();
}
}
}
领取专属 10元无门槛券
手把手带您无忧上云