springBoot整合activeMQ,并绑定生产者ip
前言
因为物联网项目的毕业设计需要,最好使用mqtt协议通信。
有两个需求:
1.获得物联网设备的ip(生产者ip)
2.使用通配符订阅Queue(因为设备很多,而且是动态新增,主题是不确定的)
springBoot整合
1.依赖
<dependency>
<groupId>org.messaginghub</groupId>
<artifactId>pooled-jms</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!--消息队列连接池-->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
2.配置参数
#activeMQ
spring.activemq.broker-url=tcp://localhost:61616
#true 表示使用内置的MQ,false则连接服务器
spring.activemq.in-memory=false
#true表示使用连接池;false时,每发送一条数据创建一个连接,内存销毁巨大
spring.activemq.pool.enabled=true
#连接池最大连接数
spring.activemq.pool.max-connections=10
3.配置转化器
springBoot的自动配置默认使用的转化器是在监听到消息时转化为字符串,为了拿到更多信息,我们可以自己定义转化器,转化器需要实现MessageConverter 接口,toMessage方法在发送前会执行,fromMessage方法在监听回调前会执行
@Component
public class IOTMQConverter implements MessageConverter {
@Autowired
private ObjectMapper objectMapper;
@Override
public Message toMessage(Object o, Session session) throws JMSException, MessageConversionException {
try {
String ret = objectMapper.writeValueAsString(o);
return session.createTextMessage(ret);
}catch (Exception e){
return null;
}
}
@Override
public Object fromMessage(Message message) throws JMSException, MessageConversionException {
ActiveMQTextMessage textMessage = (ActiveMQTextMessage) message;
return textMessage;
}
}
然后使用自己定义的convert创建一个DefaultJmsListenerContainerFactory的bean对象就可以了
@Configuration
@AutoConfigureAfter(ActiveMQAutoConfiguration.class)
public class MQTTConfig