使用activeMQ监听,调用mapper时为null怎么解决,请大神帮忙看看 5C

spring文件配置如下:
<?xml version="1.0" encoding="UTF-8"?>
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/jms">

<context:annotation-config/>
<context:component-scan base-package="com.lizx" />

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

<!-- 定义事务管理器 -->
<bean id="transactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>

<!-- 定义事务策略 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <!--所有以query开头的方法都是只读的 -->
        <tx:method name="query*" read-only="true" />
        <tx:method name="get*" read-only="true" />
        <!--其他方法使用默认事务策略 -->
        <tx:method name="delete*" propagation="REQUIRED" read-only="false"/>
        <tx:method name="edit*" propagation="REQUIRED" read-only="false"/>
        <tx:method name="add*" propagation="REQUIRED" read-only="false"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <!--pointcut元素定义一个切入点,execution中的第一个星号 用以匹配方法的返回类型,
        这里星号表明匹配所有返回类型。 com.bw.service.*.*(..)表明匹配com.bw.service包下的所有类的所有 
        方法 -->
    <aop:pointcut id="myPointcut" expression="execution(* com.lizx.app.service.*.*(..))" />
    <!--将定义好的事务处理策略应用到上述的切入点 -->
    <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut" />
</aop:config>

 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
     <property name="configLocation" value="classpath:conf/SqlMapConfig.xml"></property>
     <property name="typeAliasesPackage" value="com.lizx.app"></property>
</bean>

  <!-- 自动扫描所有的Mapper接口与文件 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.lizx.app.mapper"></property>
</bean>

<import resource="classpath*:conf/spring-ActiveMQ.xml" />

activemq配置如下:
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.1.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.12.1.xsd">

 <mvc:annotation-driven />  
 <amq:connectionFactory     id="amqConnectionFactory"
        brokerURL="tcp://127.0.0.1:61616" userName="admin" password="admin" />

 <!-- 配置JMS连接工长 -->
<bean id="connectionFactory"
   class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="amqConnectionFactory" />
    <property name="sessionCacheSize" value="100" />
</bean>
 <!-- 定义消息队列(Queue) -->
<bean id="demoQueueDestination" class="org.apache.activemq.command.ActiveMQQueue">
    <!-- 设置消息队列的名字 -->
    <constructor-arg>
        <value>Jaycekon</value>
    </constructor-arg>
</bean>

 <!-- 配置JMS模板(Queue),Spring提供的JMS工具类,它发送、接收消息。 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="defaultDestination" ref="demoQueueDestination" />
    <property name="receiveTimeout" value="10000" />
    <!-- true是topic,false是queue,默认是false,此处显示写出false -->
    <property name="pubSubDomain" value="false" />
</bean>
   <!-- 配置消息队列监听者(Queue) -->
<bean id="queueMessageListener" class="com.lizx.app.MQListener" />
<bean id="queueListenerContainer"
      class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destination" ref="demoQueueDestination" />
    <property name="messageListener" ref="queueMessageListener" />
</bean>

在监听中使用为null时的情况
图片说明
在其它地方调用,不为null时的情况:
图片说明

5个回答

MQListener在XML里面声明,那么appmaper也必须在xml中注入

lizexing1
lizexing1 能否详细说下呢,有点不懂
2 年多之前 回复


去掉,让spring 扫描注解。
原因是xml 的声明和注解冲突了吧

lizexing1
lizexing1 去掉spring扫描注解其它地方就都不能用了吧,具体怎么处理还是有点不明白您说的,可否详细说下
2 年多之前 回复
lizexing1
lizexing1 我这个错貌似给您说的这个没关系吧,没看到
2 年多之前 回复

1、确定你的MQListener是否存在com.lizx包下面。
2、确定你的MQListener在调用的时候spring的Application对象已经添加到servlet容器里面,并且servlet容器已经初始化成功。

我怀疑是多个不同applicationContext造成的。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
activemq 监听器多久执行一次,求知道

activemq有2部分,一部分是将消息放入队列,这个是主动的,程序去做 还有一部分是mq去消息队列里面查看消息,然后处理,这个是多久执行一次?

ActiveMQ,使用设置监听的方式异步获取消息

使用设置监听的方式,在收到MQ消息后,需要对消息进行解析处理,我是直接在这个内部类里面调用外部类的方法进行处理的。想请教一下,外部类是否可以获取到这个内部类收到的MQ消息? ``` consumer.setMessageListener(new MessageListener() { @Override public void onMessage(Message message) { TextMessage tm = null; String msg; if(message instanceof ActiveMQTextMessage){ tm = (TextMessage) message; try { msg = tm.getText(); logger.info("获取前台发送的MQ信息" + msg); System.out.println( msg); String result=""; is_summary=getInstance().getIs_summary(msg); List<FundsInvestorInfoModel> iList=getInstance().getInvestorInfoModelList(msg); List<String> ticketList=getInstance().getTicketList(msg); is_all=getInstance().is_all(msg); result=getInstance().checkDeposit(is_summary, is_all, iList, ticketList); getInstance().sendMQ(result,""); logger.info("返回到前台的MQ消息" +result); System.out.println( result); } catch (JMSException e) { logger.error(e.getMessage(), e); } } } }); ```

activeMQ的疑问,高手求教

![图片说明](https://img-ask.csdn.net/upload/201703/21/1490066185_164005.png) 这个topic 是一个什么信息,我发现每次处理完一条消息后 都会生成这样一条信息,有点儿糊涂。

activeMQ,怎样写不同监听器监听不同方法

最近学淘淘项目。视频只讲了新增商品时同步索引库。没讲删除商品时同步索引库。现在我删除了的商品,还能搜索到。我看了下索引库有现成的delete方法,参数好像是id或是ids。这个应该不难写。但是消息传来了,监听器怎么知道是要删除还是要新增呢? 于是考虑写一个监听器监听删除商品的方法。但是怎样配置使得不同监听器监听不同方法呢?

动态监听activemq 的topic!!!!!

现springboot整合的active目前,监听话题使用的是@JmsListener,但是目前想动态里面参数,一愁莫展,所以想问哈各位,有没有啥方法达到动态修改@JmsListener的参数,或则其他具体点的方法达到动态监听,要哭了!!!!

C# 怎么监听ActiveMq连接异常?

我想得到ActiveMq的登录用户列表,和离线信息,有没有办法,我在ActiveMq的bat运行服务器中看到了用户离线消息,我怎么通过ActiveMq的DLL监听他们的这些离线信息。 我用IConnection中的ExceptionListener事件不好用,什么也接不到也不触发,不知道这兄弟是做什么的。

activemq中消费者监听的方法进不去

activemq连接本地的服务能正常执行,如果连其他IP地址的服务,一直卡在消费者监听方法这里, messageConsumer.setMessageListener(new MessageListener() { public void onMessage(Message message) { .....//不会到这个方法里面来 } }

spring+activemq 发布订阅模式,短期运行正常后监听消失

activeMQ发布/订阅模式下,消费者端通过异步消息监听器(messagelistener)实现消息订阅,同样的消费者端应用被部署到两台linux服务器上,正常监听一段时间后,经过没有消息发送阶段后,等到消息生产者再次开始发布消息时,其中一台服务器上的消费者端应用没有监听线程了,请问这是啥原因?请大神们赐教!!配置了失效重连机制

activemq与websocket结合无法向前台推送

activemq接收到消息后,调用websocket的convertAndSend接口向前台发送消息,前台接收不到。但是通过在controller里面编写测试代码,调用convertAndSend进行发送,前台是可以接收到信息的。请问是怎么回事呢。 activemq的接收端代码: @Service public class CalculateQueueReceiver implements MessageListener { @Autowired private MessageSendMaster messageSendMaster; @Override public void onMessage(Message message) { ActiveMQBytesMessage bytesMessage = (ActiveMQBytesMessage) message; String s = new String(bytesMessage.getContent().getData()); System.out.println(new Date() + s); messageSendMaster.sendMessage(s); } } @Component public class MessageSendMaster { private static Logger logger = Logger.getLogger(MessageSendMaster.class); @Autowired private SimpMessagingTemplate template; public void sendMessage(String message){ try { template.convertAndSend("/topic/calculate", message); } catch (Exception e) { logger.error(e.getMessage(), e); e.printStackTrace(); } } }

springboot以方法调用的方式执行activemq

我们知道,在springboot中要发送消息给activemq,需要 在消费体中注释 @JmsListener(destination = MQDest.PUSH) 然后在service去用jmsTemplate调用 jmsTemplate.send(MQDest.PUSH, session -> { ObjectMessage message = session.createObjectMessage(msg); return message; }); 。。。我想请问一下,有什么办法可以直接像执行方法一样去调用,。。否则的话,我用idea都无法去跳转点开。。

关于ActiveMQ集群遇到的问题

项目为了实现异步的方式使用了ActiveMQ消息队列,但在使用过程中碰到了两个问题。1.消息队列堆积的问题,从监控看,pending的消息越来越多。2.从队列中取消息时有明显延迟的问题,大概在十秒左右。集群为两主两从,为master-slave方式,我对集群不是很了解,有什么不对的请各位大神指出。 第一个错误目前为队列消息添加了超时时间,使用了jmsTemplate.setReciveTime()解决,运行几天后未出现积压问题。 第二个错误还望大神指点,有什么条件没说清楚的话,请提醒我补充。

activeMQ异步,订阅模式,如何解决消息丢失和重发

我们现在在做一个商城项目;使用activeMQ完成系统之间的信息同步,实用异步发 送,发布订阅模式,因为异步,所以使用的事listener监听,这样如果我配置消息 持久化,问题如下: 1. consumer返回给broker的ackknowldge是在onmessage方法后,所以不 会存在消息丢失,对吗? 2. 如果consumer在接收到消息但是未给broker应答,consumer宕机了,默认重发 数是6次,如果我consumer一直宕机,broker会在发送第一条发现连接不上的时候停止发送,还是一直发完6次?最后消息又会怎样? 3. 我的消息都比较重要,不允许丢失,要怎么处理? 各位大哥,我已经看各种博文两天两夜了,实在理解总结不了,请帮忙解惑,不要丢给我一堆连接叫我看,谢谢!

activemq 不能获取ip的问题

请问,如何在activemq的consumer端获取producer端的ip地址?

分布式事务处理解决方案中,ActiveMQ应该怎么使用

最近在研究分布式事务处理,又看到一种方式是消息最终一致性的解决方案。但是,具体ActiveMQ在分布式处理中是怎么应用的,还不太了解,谁能帮忙解答下,重谢。

求解决:ActiveMQ在发布订阅模式下会递增式的重复接收消息

求解决:ActiveMQ在发布订阅模式下有多个consumer,consumer会递增式的重复接收消息 问题:springboot集成ActiveMQ实现了消费队列和发布订阅两种消息类型,发布订阅模式下有TopicConsumer1和TopicConsumer2,监听的destination都是alarm.topic,但这两个consumer会递增式的重复接收消息。我的实现代码如下: ------------------------------------------------------------- test入口类 @RunWith(SpringRunner.class) @SpringBootTest(classes = MessageCenterApplication.class) public class ActivemqTest { @Autowired private Producer producer; @Test public void testSendTopicMessage(){ for (int i = 0; i < 5; i++) { producer.sendTopicMessage(Destinations.ALARM_TOPIC, "here is a topic message, the number is " + i); } } /*输出结果如下,这个输出结果不是我所期望的 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 0 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 0 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 1 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 1 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 1 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 1 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 2 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 2 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 2 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 2 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 2 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 2 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 3 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 3 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 3 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 3 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 3 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 3 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 3 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 3 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 4 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 4 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 4 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 4 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 4 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 4 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 4 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 4 TopicConsumer2接收到的消息内容为:here is a topic message, the number is 4 TopicConsumer1接收到的消息内容为:here is a topic message, the number is 4*/ } ------------------------------------------------------------- Producer实现类 @Component public class Producer { @Autowired @Qualifier("jmsQueueMessagingTemplate") private JmsMessagingTemplate jmsQueueMessagingTemplate; @Autowired @Qualifier("jmsTopicMessagingTemplate") private JmsMessagingTemplate jmsTopicMessagingTemplate; /** * 使用queue消息类型(点对点) */ public void sendQueueMessage(String destination, final String message){ Queue queue = new ActiveMQQueue(destination); jmsQueueMessagingTemplate.convertAndSend(queue, message); } /** * 使用topic消息类型 */ public void sendTopicMessage(String destination, final String message){ Topic topic = new ActiveMQTopic(destination); jmsTopicMessagingTemplate.convertAndSend(topic, message); } } ------------------------------------------------------------- TopicConsumer1和TopicConsumer2的实现代码 @Component public class TopicConsumer1 { @JmsListener(destination = Destinations.ALARM_TOPIC, containerFactory = "jmsListenerContainerFactory4Topic") public void receive(String message){ System.out.println("TopicConsumer1接收到的消息内容为:" + message); } } @Component public class TopicConsumer2 { @JmsListener(destination = Destinations.ALARM_TOPIC, containerFactory = "jmsListenerContainerFactory4Topic") public void receive(String message){ System.out.println("TopicConsumer2接收到的消息内容为:" + message); } } ------------------------------------------------------------- jmsTopicMessagingTemplate对应的bean的配置 @Configuration public class JmsMessagingConfig { @Autowired @Qualifier(value = "jmsQueueTemplate") private JmsTemplate jmsQueueTemplate; @Autowired @Qualifier(value = "jmsTopicTemplate") private JmsTemplate jmsTopicTemplate; @Bean(name = "jmsQueueMessagingTemplate") public JmsMessagingTemplate jmsQueueMessagingTemplate(){ return new JmsMessagingTemplate(jmsQueueTemplate); } @Bean(name = "jmsTopicMessagingTemplate") public JmsMessagingTemplate jmsTopicMessagingTemplate(){ return new JmsMessagingTemplate(jmsTopicTemplate); } } ------------------------------------------------------------ jmsTopicTemplate对应的bean的配置 @Configuration public class JmsConfig { private final JmsProperties jmsProperties; private final ObjectProvider<DestinationResolver> destinationResolver; private final ObjectProvider<MessageConverter> messageConverter; public JmsConfig(JmsProperties jmsProperties, ObjectProvider<DestinationResolver> destinationResolver, ObjectProvider<MessageConverter> messageConverter) { this.jmsProperties = jmsProperties; this.destinationResolver = destinationResolver; this.messageConverter = messageConverter; } @ConfigurationProperties(prefix = "spring.activemq") @Bean(name = "jmsQueueTemplate") @Primary public JmsTemplate jmsQueueTemplate(PooledConnectionFactory pooledConnectionFactory) { JmsTemplate template = new JmsTemplate(pooledConnectionFactory); // 设置为使用queue消息类型 template.setPubSubDomain(false); DestinationResolver destinationResolver = (DestinationResolver) this.destinationResolver.getIfUnique(); if (destinationResolver != null) { template.setDestinationResolver(destinationResolver); } MessageConverter messageConverter = (MessageConverter) this.messageConverter.getIfUnique(); if (messageConverter != null) { template.setMessageConverter(messageConverter); } // deliveryMode, priority, timeToLive 的开关,要生效,必须配置为true,默认false template.setExplicitQosEnabled(true); // DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久 template.setDeliveryMode(DeliveryMode.PERSISTENT); // 默认不开启事务 // 如果不启用事务,则会导致XA事务失效; // 作为生产者如果需要支持事务,则需要配置SessionTransacted为true template.setSessionTransacted(true); return template; } @ConfigurationProperties(prefix = "spring.activemq") @Bean(name = "jmsTopicTemplate") public JmsTemplate jmsTopicTemplate(PooledConnectionFactory pooledConnectionFactory) { JmsTemplate template = new JmsTemplate(pooledConnectionFactory); // 设置为使用topic消息类型 template.setPubSubDomain(true); DestinationResolver destinationResolver = (DestinationResolver) this.destinationResolver.getIfUnique(); if (destinationResolver != null) { template.setDestinationResolver(destinationResolver); } MessageConverter messageConverter = (MessageConverter) this.messageConverter.getIfUnique(); if (messageConverter != null) { template.setMessageConverter(messageConverter); } // deliveryMode, priority, timeToLive 的开关,要生效,必须配置为true,默认false template.setExplicitQosEnabled(true); // DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久 template.setDeliveryMode(DeliveryMode.PERSISTENT); // 默认不开启事务 // 如果不启用事务,则会导致XA事务失效; // 作为生产者如果需要支持事务,则需要配置SessionTransacted为true template.setSessionTransacted(true); return template; } @ConfigurationProperties(prefix = "spring.activemq") @Bean(name = "jmsListenerContainerFactory4Topic") public DefaultJmsListenerContainerFactory jmsListenerContainerFactory4Topic(PooledConnectionFactory pooledConnectionFactory) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConnectionFactory(pooledConnectionFactory); // 设置为使用topic消息类型 factory.setPubSubDomain(true); //如果单独配置了分布式事务,则启用 // if (this.transactionManager != null) { // factory.setTransactionManager(transactionManager); // } else { factory.setSessionTransacted(Boolean.valueOf(true)); // } JmsProperties.Listener listener = jmsProperties.getListener(); factory.setAutoStartup(listener.isAutoStartup()); if (listener.getAcknowledgeMode() != null) { factory.setSessionAcknowledgeMode(Integer.valueOf(listener.getAcknowledgeMode().getMode())); } String concurrency = listener.formatConcurrency(); if (concurrency != null){ factory.setConcurrency(concurrency); } return factory; } @ConfigurationProperties(prefix = "spring.activemq") @Bean(name = "jmsListenerContainerFactory4Queue") public DefaultJmsListenerContainerFactory jmsListenerContainerFactory4Queue(PooledConnectionFactory pooledConnectionFactory) { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConnectionFactory(pooledConnectionFactory); // 设置为使用queue消息类型 factory.setPubSubDomain(false); //如果单独配置了分布式事务,则启用 // if (this.transactionManager != null) { // factory.setTransactionManager(transactionManager); // } else { factory.setSessionTransacted(Boolean.valueOf(true)); // } JmsProperties.Listener listener = jmsProperties.getListener(); factory.setAutoStartup(listener.isAutoStartup()); if (listener.getAcknowledgeMode() != null) { factory.setSessionAcknowledgeMode(Integer.valueOf(listener.getAcknowledgeMode().getMode())); } String concurrency = listener.formatConcurrency(); if (concurrency != null){ factory.setConcurrency(concurrency); } return factory; } } -------------------------------------------------------------------------------------- yml配置文件的配置 spring: #jms配置,配合activemq一起配置 jms: listener: concurrency: 1 max-concurrency: 50 #activemq配置 activemq: #默认使用spring-boot-starter-activemq内嵌的activemq,除非明确指定了broker-url in-memory: false user: system password: manager broker-url: auto+nio://192.168.137.5:61616 pool: enabled: true max-connections: 500

java+activeMQ BlobMessage 如何启动MQ的文件服务

想要实现activeMQ BlobMessage传输文件,provider创建文件消息, 可以成功发送到消息队列,cosumer监听到消息,获取输入流时获取不到。 我想应该是消息发送时,文件存放在activeMQ自带的文件服务器中, 监听消息并获取文件时,是通过HTTP的GET方法获取。但是我不知道开启activeMQ 的文件服务。我已经在activeMQ的配置文件中修改了jetty.xml. 希望大神能帮忙解释一下,如何嵌入式使用jetty的fileserver

使用activemq局域网的解决方法?

现在项目中用到activemq作为异步处理的消息中间件,但是在局域网中进行调试的时候,,当遇到断点老是会同时跑到别人的项目中去,,自己的项目也会进入断点模式,请问怎么才能当遇到断点的时候不跑到局域网中的项目,只进入到自己本机的项目(局域网中也开启了activemq的服务就会这样),大家遇到過嗎?

activemq之ajax调用配置问题

用ajax调用activemq需要在web服务端配置AjaxServlet,问题是开发语言是php, 应该怎么配置?还有stomp又是怎么一回事?望大神解救~~

使用ActiveMQ的Topic模式,生产者生产了两条消息,队列中有两条消息,消费者只消费一条就不再消费了

1、问题:使用ActiveMQ的Topic模式,消息队列中有两条消息,消费者只消费一条消息就不再消费了? 代码如下: 生产者代码 ``` package com.babi.common.utils; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MapMessage; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.Topic; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; /* * ACtiveMQ生产者 * */ public class UpgradeQMSender { // MQname private static final String MESSAGE_QUEUE = "mopark-upgrade"; // 默认的ActiveMQ服务器端绑定的端口。 private static final int PORT = 61616; /** * MQ发送消息 * * @param state * @param deviceID * @param versionId */ public static void sendupgrade(String state, String deviceID, String versionId) { // ConnectionFactory :连接工厂,JMS 创建连接 ConnectionFactory connectionFactory; // Connection :JMS 客户端到JMS Provider 的连接 Connection connection = null; // Session: 一个发送或接收消息的线程 Session session; // Destination :消息的目的地 Topic topic; // MessageProducer:消息生产者。 MessageProducer producer; // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:" + PORT); try { // 构造从工厂得到连接对象 connection = connectionFactory.createConnection(); // 启动 connection.start(); // 获取操作连接 session = connection.createSession(Boolean.TRUE.booleanValue(), Session.AUTO_ACKNOWLEDGE); // 获取session注意参数值 liwenhui 是一个服务器的queue,须在在ActiveMq的console配置 // destination = session.createQueue(MESSAGE_QUEUE); // 创建消息 topic = session.createTopic(MESSAGE_QUEUE); // 得到消息生成者,发送者 producer = session.createProducer(topic); // 设置不持久化 producer.setDeliveryMode(DeliveryMode.PERSISTENT); // 设置消息过期时间 producer.setTimeToLive(1000 * 10 * 60); CommonLog.info(UpgradeQMSender.class, "state:" + state); CommonLog.info(UpgradeQMSender.class, "deviceID:" + deviceID); // 发送消息。 sendupgradeMessage(session, producer, state, deviceID, versionId); session.commit(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != connection) connection.close(); } catch (Throwable ignore) { } } } /** * MQ调用方法 * * @param session * @param producer * @param state * @param deviceID * @param versionId */ public static void sendupgradeMessage(Session session, MessageProducer producer, String state, String deviceID, String versionId) { MapMessage message = null; try { message = session.createMapMessage(); message.setString("state", state); message.setString("deviceID", deviceID); message.setString("versionId", versionId); } catch (Exception e) { e.printStackTrace(); } // 发送消息到目的地方 try { System.out.println(message); producer.send(message); CommonLog.info(UpgradeQMSender.class, "消息内容:" + message); } catch (JMSException e) { e.printStackTrace(); } } } ``` 消费者代码: ``` package com.babi.lockservice; import java.io.File; import java.io.RandomAccessFile; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.Session; import javax.jms.Topic; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.ActiveMQPrefetchPolicy; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.jms.listener.DefaultMessageListenerContainer; import com.babi.bean.Device; import com.babi.common.CommonLog; import com.babi.common.Params; import com.babi.common.FileUpload.FileUploadFile; import com.babi.common.FileUpload.FileUploadServer; import com.babi.common.FileUpload.Filespilt; import com.babi.common.FileUpload.RemoteFile; import com.babi.dao.JedisUtils; import com.babi.dao.LockDAO; import io.netty.channel.ChannelHandlerContext; import redis.clients.jedis.Jedis; public class UpgradeConsumer { String LOCKKEY = null; // lockID:lockID LockDAO lockdao = new LockDAO(); // 数据库 Device device = new Device(); // 车锁bean JedisUtils jedisUtils = new JedisUtils(); // redis工具类 public RandomAccessFile randomAccessFile; FileUploadFile fileUploadFile; public void QMConsumer() throws JMSException { Connection connection = null; // 连接 Session session = null; // 会话:接受或者发送消息的线程 MessageConsumer consumer = null; // 消息接收者 CommonLog.info(this.getClass(), "MQ消费者启动中......"); try { ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, Params.MQ_HOST + ":" + Params.MQ_PORT); connection = connectionFactory.createConnection(); connection.start(); session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); Topic topic = session.createTopic(Params.UPGRADEMQ_NAME); consumer = session.createConsumer(topic); } catch (Exception e) { throw new RuntimeException("创建MQ连接时发生了错误!"); } try { // 注册监听器,注册后,列队的消息变化会自动触发监听器,接收消息并处理 consumer.setMessageListener(new MessageListener() { @Override public void onMessage(Message message) { try { MapMessage mapMessage = (MapMessage) message; if (mapMessage != null) { message.acknowledge(); String action = mapMessage.getString("state"); String LOCKID = mapMessage.getString("deviceID"); String VersionId = mapMessage.getString("versionId"); LOCKKEY = "LOCK:" + LOCKID; // 处理MQ发来的消息 if (LOCKID != null) { System.out.println("来自API的下行指令:action=" + action + ", LOCKID=" + LOCKID + ", imei=" + lockdao.findImeiByLockId(LOCKID)); CommonLog.info(this.getClass(), "来自API的下行指令:action=" + action + ", LOCKID=" + LOCKID + ", imei=" + lockdao.findImeiByLockId(LOCKID)); jedisUtils.setutils(LOCKKEY, "LOCKACK", "FALSE"); jedisUtils.setutils(LOCKKEY, "CMDSTATUS", " "); ChannelHandlerContext ctx = OSMap2Node.channelMap.get(LOCKID); if (action.equals(Integer.toString(SERVERCMD.LOCKUPGRADE.getIndex()))) { String FileUrl = download(VersionId);// 根据VersionId查找固件下载地址 System.out.println("FileUrl" + FileUrl); String file_name = RemoteFile.downRemoteFile(FileUrl, "firmwareVersion");// 获取下载之后文件的保存的路径 sendFileToLock(ctx, file_name); } } } } catch (Exception e) { e.printStackTrace(); } } }); // } } catch (Exception e) { throw new RuntimeException("MQ接收消息并处理时发生了错误!"); } } /** * 发送文件 * * @param ctx * @param file_name * @throws Exception */ protected void sendFileToLock(ChannelHandlerContext ctx, String file_name) throws Exception { System.out.println("sendFileToLock" + file_name); File file = new File("./" + file_name); new Filespilt().split(file, ctx); } /** * 根据版本Id查找下载地址 * * @param VersionId * @return * @throws Exception */ public String download(String VersionId) throws Exception { SqlRowSet rowSet = lockdao.findAddressByVersion(VersionId); String url = null; if (rowSet.next()) { url = rowSet.getString("download_address"); } return url; } } ```

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

深入剖析Springboot启动原理的底层源码,再也不怕面试官问了!

大家现在应该都对Springboot很熟悉,但是你对他的启动原理了解吗?

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你期望月薪4万,出门右拐,不送,这几个点,你也就是个初级的水平

先来看几个问题通过注解的方式注入依赖对象,介绍一下你知道的几种方式@Autowired和@Resource有何区别说一下@Autowired查找候选者的...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

立即提问
相关内容推荐