一、环境
$ python3 --version
Python 3.5.3
- ActiveMQ
Version 5.11.1
,部署于docker容器
二、准备工作
-
sudo pip3 install stomp.py
,安装stomp用于python连接mq
- stomp协议使用
61613
端口建立连接,首先确认activeMq服务是否支持该连接
-
docker ps | grep activemq
查看容器id,这里以a7d981cf6176为例
-
docker exec -it a7d981cf6176 bash
进入容器
-
cd /usr/local/apache-activemq/conf/
进入配置目录
-
vi activemq.xml
编辑配置文件,transportConnectors节点下如果没有stomp协议,添加一行并保存退出到宿主机
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613"/>
-
docker restart a7d981cf6176
重启mq服务
三、复现
- 关于python使用stomp连接mq网上一大堆,这里暂不展开
- 具体发送消息处代码
conn.send(destination="/topic/testTopic", body="your message !")
- 在消息接消费处,始终显示BytesMessage,预期为TextMessage
- 参考官方文档http://activemq.apache.org/stomp.html中Working with JMS Text/Bytes Messages and Stomp章节,表示如果包含content-length头,就是BytesMessage,否则是TextMessage,这里显然并没有传入任何头配置,也尝试手动传入None等均无效
-
解决方式:传入
amq-msg-type=text
头配置即可
conn.send(destination="/topic/testTopic", body="your message !", headers={
"amq-msg-type": "text",
})