需求:使用 python 程序向 activemq 的主题推送数据,默认推送的数据类型是 BytesMessage,java 程序那边接收较为麻烦,改为推送 TextMessage 类型的数据

解决方法:想要推送 TextMessage 需要指定 auto_content_length=False

示例代码如下:

# coding=utf-8
import stomp def send_to_topic(msg):
try:
conn = stomp.Connection10([("10.10.19.200", 61613)], auto_content_length=False)
conn.start()
conn.connect()
conn.send('/topic/HIATMP.HISENSE.ILLEGAL.AIREVIEW', msg)
conn.disconnect()
return 1
except Exception as e:
# logging.error(f"send message with activemq failed, error is:{e}")
return 0 if __name__ == "__main__":
result = send_to_topic("ILLEGAL01,2.1,0001,5b9171c2815342c5bce90f601f14d182,1,02,鲁BJ0A92,2019-04-26 15:51:45,12080,601078111050,宁夏路与福州南路路口,370202000000,1,1,370202000000011125,3,01,,0,http://10.10.19.250/1.png,http://10.10.19.250/2.png,http://10.10.19.250/3.png,,717/1846/136/36/1,2,2019-04-26 15:51:53,,,,,,,,,1,不按道行驶,,,,,,,,,1,10")
print result

  

例外,附上 activemq 关于主题的生产者,消费者代码

1)python 版本(stomp协议)

生产者:

# coding=utf-8
import stomp def send_to_topic(msg):
try:
conn = stomp.Connection10([("10.10.19.200", 61613)], auto_content_length=False)
conn.start()
conn.connect()
conn.send('/topic/HIATMP.HISENSE.ILLEGAL.AIREVIEW', msg)
conn.disconnect()
return 1
except Exception as e:
# logging.error(f"send message with activemq failed, error is:{e}")
return 0 if __name__ == "__main__":
result = send_to_topic("ILLEGAL01,2.1,0001,5b9171c2815342c5bce90f601f14d182,1,02,鲁BJ0A92,2019-04-26 15:51:45,12080,601078111050,宁夏路与福州南路路口,370202000000,1,1,370202000000011125,3,01,,0,http://10.10.19.250/1.png,http://10.10.19.250/2.png,http://10.10.19.250/3.png,,717/1846/136/36/1,2,2019-04-26 15:51:53,,,,,,,,,1,不按道行驶,,,,,,,,,1,10")
print result

  

消费者:

# coding=utf-8
import stomp class SampleListener(object):
def on_message(self, headers, message):
print('headers: %s' % headers['destination'])
print('message: %s\n' % message) # 从主题接收消息
def receive_from_topic():
conn = stomp.Connection10([("10.10.19.200", 61613)])
conn.set_listener("", SampleListener())
conn.start()
conn.connect()
conn.subscribe("/topic/HIATMP.HISENSE.ILLEGAL.AIREVIEW")
while True:
pass
# conn.disconnect() if __name__ == '__main__':
receive_from_topic()

2)java 版本(tcp协议)

生产者:

package ActiveMQ;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic; import org.apache.activemq.ActiveMQConnectionFactory; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID; public class TopicProducer { public static void main(String[] args) {
//连接信息设置
String username = "admin";
String password = "admin";
String brokerURL = "failover://tcp://10.10.19.200:61616";
//连接工厂
ConnectionFactory connectionFactory = null;
//连接
Connection connection = null;
//会话 接受或者发送消息的线程
Session session = null;
//消息的主题
Topic topic = null;
//消息生产者
MessageProducer messageProducer = null;
//实例化连接工厂
connectionFactory = new ActiveMQConnectionFactory(username, password, brokerURL);
try {
//通过连接工厂获取连接
connection = connectionFactory.createConnection();
//启动连接
connection.start();
//创建session
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
//创建名为TopicTest的主题
// topic = session.createTopic("HIATMP.HISENSE.ILLEGAL");
topic = session.createTopic("HIATMP.HISENSE.ILLEGAL.AIREVIEW");
//创建主题生产者
messageProducer = session.createProducer(topic);
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//不将数据持久化
//发送主题
TextMessage message = null;
for (int i = 0; i < 1; i--) {
//创建要发送的文本信息
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");//设置日期格式
String dateTime = df.format(new Date());// new Date()为获取当前系统时间
// message = session.createTextMessage("illegal" + dateTime); String uuid = UUID.randomUUID().toString().replaceAll("-","");
String message_fmt = String.format("ILLEGAL01,2.1,0001,%s,1,02,鲁BJ0A92,2019-04-26 15:51:45,12080,601078111050,宁夏路与福州南路路口,370202000000,1,1,370202000000011125,3,01,,0,http://10.10.19.250/1.png,http://10.10.19.250/2.png,http://10.10.19.250/3.png,,717/1846/136/36/1,2,2019-04-26 15:51:53,,,,,,,,,1,不按道行驶,,,,,,,,,1,10", uuid);
message = session.createTextMessage(message_fmt);
//通过主题生产者发出消息
messageProducer.send(message);
System.out.println("发送成功:" + message.getText());
session.commit(); // 提交到mq Thread.sleep( 200 * 1 );
}
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != connection) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}

producer

消费者:

package ActiveMQ;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.BytesMessage;
import javax.jms.Topic; import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.transport.stomp.Stomp; public class TopicConsumer { public static void main(String[] args) {
// Stomp.Headers.Send.PERSISTENT; //连接信息设置
String username = "admin";
String password = "admin";
String brokerURL = "failover://tcp://10.10.19.200:61616";
// String brokerURL = "failover://stomp://0.0.0.0:61613";
//连接工厂
ConnectionFactory connectionFactory = null;
//连接
Connection connection = null;
//会话 接受或者发送消息的线程
Session session = null;
//主题的目的地
Topic topic = null;
//主题消费者
MessageConsumer messageConsumer = null;
//实例化连接工厂
connectionFactory = new ActiveMQConnectionFactory(username, password, brokerURL); try {
//通过连接工厂获取连接
connection = connectionFactory.createConnection();
//启动连接
connection.start();
//创建session
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建一个连接TopicTest的主题
topic = session.createTopic("HIATMP.HISENSE.ILLEGAL.AIREVIEW");
//创建主题消费者
messageConsumer = session.createConsumer(topic); messageConsumer.setMessageListener(new MyMessageListener());
} catch (JMSException e) {
e.printStackTrace();
}
} } class MyMessageListener implements MessageListener { @Override
public void onMessage(Message message) {
System.out.println(message);
// 接收 BytesMessage
// BytesMessage bytesMessage = (BytesMessage) message; TextMessage bytesMessage = (TextMessage) message;
try {
// 接收 BytesMessage
// byte []bt = new byte[(int) bytesMessage.getBodyLength()];
// bytesMessage.readBytes(bt);
// String str = new String(bt);
// System.out.println("接收订阅主题:" + str); System.out.println("接收订阅主题:" + bytesMessage.getText()); } catch (JMSException e) {
e.printStackTrace();
}
}
}

consumer

end~

activemq BytesMessage || TextMessage的更多相关文章

  1. spring整合JMS - 基于ActiveMQ实现

    一. 开篇语 继上一篇apache ActiveMQ之初体验后, 由于近期一直在复习spring的东西, 所以本文就使用spring整合下JMS. 二. 环境准备 1. ActiveMQ5.2.0 ( ...

  2. ActiveMQ的安装与使用。

    1.什么是ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE .4规范的 JMS Provider实现,尽 ...

  3. ActiveMQ消息队列的使用及应用

    这里就不说怎么安装了,直接解压出来就行了. 谢绝转载,作者保留所有权力 目录:  一:JMQ的两种消息模式 1.1:点对点的消息模式 1.2:订阅模式 二:点对点的实现代码 2.1:点对点的发送端 2 ...

  4. activemq和jms是种什么关系

    JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程中的所有数据结构和交互流程. 而activemq则是消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者. jm ...

  5. ActiveMQ入门

    ActiveMQ简介 概要 开源 JMS-compliant 消息中间件message-oriented middleware(MOM) 松耦合,相对于RPC的紧耦合 发送消息fire-and-for ...

  6. C++ activemq CMS 学习笔记.

    很早前就仓促的接触过activemq,但当时太赶时间.后面发现activemq 需要了解的东西实在是太多了. 关于activemq 一直想起一遍文章.但也一直缺少自己的见解.或许是网上这些文章太多了. ...

  7. Activemq消息类型

    Activemq消息类型JMS规范中的消息类型包括TextMessage.MapMessage.ObjectMessage.BytesMessage.和StreamMessage等五种.ActiveM ...

  8. ActiveMQ之二--JMS消息类型

    1.前言 //发送文本消息 session.createTextMessage(msg); //接受文本消息 public void onMessage(Message msg) { TextMess ...

  9. activemq spring 配置

    Apache ActiveMQ是最流行和最强大的开源消息集成模式服务器.Apache ActiveMQ是速度快,支持多跨语言的客户端和协议,带有易于使用企业集成模式和许多先进的功能在充分支持JMS 1 ...

随机推荐

  1. mount: unknown filesystem type ‘ntfs’ 解决方法

    问题: mount –t ntfs /dev/sde1 /mnt/mount: unknown filesystem type ‘ntfs’ 这是由于CentOS release 6.6(Final) ...

  2. axios和drf结合的增删改查

    增删改查 查: 前端实例: mounted() { //获取所有数据 // var Base_url = 'http://paas.bktst.sh.sgcc.com.cn/t/files-check ...

  3. VPB测试 使用Osgdem运行例子

    1.Osgdem运行例子所需数据下载地址: http://www.cc.gatech.edu/projects/large_models/ps.html Download Elevation Map: ...

  4. Python - Django - 母版和继承

    可以把多个页面相同的部分提取出来,放在一个母板里,这些页面只需要继承这个母板就好了 通常会在母板中定义页面专用的 CSS 块和 JS 块,方便子页面替换 定义块: {% block 名字 %} {% ...

  5. Sequelize 类 建立数据库连接 模型定义

    1:Sequelize 类 Sequelize是引用Sequelize模块获取的一个顶级对象,通过这个类可以获取模块内对其他对象的引用.比如utils.Transaction事务类.通过这个顶级对象创 ...

  6. Red Team远程控制软件

    开源远程管理控制 https://github.com/malwaredllc/byob 僵尸网络生成框架 https://github.com/panda-re/lava 大规模向程序中植入恶意程序 ...

  7. swift 导入第三方库

    现在的项目也是做了几个,每个都会导入几个优秀的第三方…… 这里写下导入的步骤,方便查询:::: 1.手动导入 首先要知道,是需要文件,还是框架 比如 Alamofire.SnapKit,都需要导入框架 ...

  8. openfoam耦合liggghts安装

    本次安装基于新安装的ubuntu18.04LTS桌面版系统,用户名为ubuntu,此前未安装其他软件(进行了系统提醒的更新),安装时间为2019年9月. 安装前需确认需要安装的OpenFOAM版本,C ...

  9. 微信小程序中的事件绑定

    前言: 微信小程序中的事件绑定和Vue中的事件绑定其实有很多的相似之处,所以如果有过Vue相关的经验,学起来的话还是比较容易的. js代码: // 页面级的js文件必须调用Page函数来注册页面, / ...

  10. NAT的配置

    实验的拓扑图如下所示 首先我们对路由器进行基础的地址配置 我们先在R2路由器上设置一条连接外网的静态路由 然后我们给PC1设置一个静态NAT 然后使得PC1 通过202.169.10.5 地址访问外网 ...