1. ActiveMQ的传输协议
- 面试题:
性能调优,常用配置,可使用的传输协议 - 官网
http://activemq.apache.org/configuring-transports
- 是什么?
activemq.xml第111行
- 修改部分
<transportConnector name="nio" uri="nio://0.0.0.0:61618"/>
- NIO案例
1.1 使用nio发送和接收
// 连接地址
private final static String ACTIVE_URL = "nio://192.168.25.110:61618";
// 目的地名称
private final static String QUEUE_NAME = "nioQueue";
// 目的地名称
private final static String TOPIC_NAME = "nioTopic";
// ActiveMQConnectionFactoryCustomizer
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVE_URL);
/**
* 初始化发送
*
* @throws JMSException
*/
@Test
public void test01() throws JMSException {
// 连接
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
// 创建会话、【事务,签收】
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建目的地
Queue queue = session.createQueue(QUEUE_NAME);
MessageProducer producer = session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
// 发送消息
for (int i = 1; i <= 3; i++) {
TextMessage textMessage = session.createTextMessage();
textMessage.setText("这是一个测试:" + i);
producer.send(textMessage);
}
// 关闭资源
producer.close();
session.close();
connection.close();
}
// 监听接收 异步非阻塞方式
@Test
public void acceptListener() throws JMSException, IOException {
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
// 创建目的地
Queue queue = session.createQueue(QUEUE_NAME);
MessageConsumer consumer = session.createConsumer(queue);
consumer.setMessageListener((t) -> {
if (null != t && t instanceof TextMessage) {
TextMessage t1 = (TextMessage) t;
try {
System.out.println("监听模式:" + t1.getText());
t1.acknowledge();
} catch (JMSException e) {
e.printStackTrace();
}
} else if (null != t && t instanceof MapMessage) {
MapMessage t1 = (MapMessage) t;
try {
System.out.println("MapMessage:" + t1.getString("k1"));
} catch (JMSException e) {
e.printStackTrace();
}
}
});
System.in.read();//等待
consumer.close();
connection.close();
}
查看链接如下:
- 多协议支持 nio+mqtt+tcp+…
官网示例:
配置详情:
activemq.xml新增
<transportConnector name="auto+nio" uri="auto+nio://0.0.0.0:61618?maximumConnections=1000&wireFormat.maxFrameSize=104857600&org.apache.activemq.transport.nio.SelectorManager.corePoolSize=20&org.apache.activemq.transport.nio.SelectorManager.maximumPoolSize=50" />
访问官网:
代码启动