81,122
社区成员




@Configuration
public class RabbitMqConfig {
public static final String EXCHANGE = "apply.release.status";
// 目前只监听京东申请单
public static final String ROUTINGKEY = "apply.status.5.5208.80010114";
@Bean
public TopicExchange topicExchange() {
return new TopicExchange(EXCHANGE);
}
@Bean
public Queue uasQueue() {
return new Queue("vopen.apply.release.status.5208.cloud.new");
}
@Bean
public Binding binding() {
return BindingBuilder.bind(uasQueue()).to(topicExchange()).with(ROUTINGKEY);
}
@Bean(name="uasConnectionFactory")
@Primary
public ConnectionFactory uasConnectionFactory(
@Value("${rabbitmq.uas.host}") String host,
@Value("${rabbitmq.uas.port}") int port,
@Value("${rabbitmq.uas.username}") String username,
@Value("${rabbitmq.uas.password}") String password,
@Value("${rabbitmq.uas.vhost}") String vhost
){
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(host);
connectionFactory.setPort(port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(vhost);
return connectionFactory;
}
@Bean(name="uasRabbitTemplate")
@Primary
public RabbitTemplate uasRabbitTemplate(
@Qualifier("uasConnectionFactory") ConnectionFactory connectionFactory
){
RabbitTemplate uasRabbitTemplate = new RabbitTemplate(connectionFactory);
return uasRabbitTemplate;
}
@Bean(name="uasFactory")
public SimpleRabbitListenerContainerFactory uasFactory(
SimpleRabbitListenerContainerFactoryConfigurer configurer,
@Qualifier("uasConnectionFactory") ConnectionFactory connectionFactory
) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setMessageConverter(new Jackson2JsonMessageConverter());
factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
configurer.configure(factory, connectionFactory);
return factory;
}
}
@Component
@RabbitListener(queues = "vopen.apply.release.status.5208.cloud.new", containerFactory = "uasFactory")
public class ApplyStatusListener implements ChannelAwareMessageListener {
private final Logger logger = LoggerFactory.getLogger(ApplyStatusListener.class);
@Autowired
private JDNotifyService jdNotifyService;
private JsonMessageConverter messageConverter = new JsonMessageConverter();
@RabbitHandler
public void onMessage(Message message,Channel channel) {
logger.info("申请单系统RabbitMQ消息: {}", message);
ApplyReleaseStatusDTO apply = null;
String jsonString = null;
try {
Object jsonMessage = messageConverter.fromMessage(message);
jsonString = JSON.toJSONString(jsonMessage);
apply = JSON.parseObject(jsonString, ApplyReleaseStatusDTO.class);
logger.info("message 序列化成功:{}", apply.getApplyNo());
if (JDConstants.CUST_SOURCE_COOPERATOR.equals(apply.getCooperatorId())){
jdNotifyService.checkApplyResult(apply);
}
} catch (Exception e) {
logger.warn("message 序列化失败:{}", message,e);
} finally {
try {
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
} catch (IOException e) {
}
}
}
}
org.springframework.amqp.rabbit.listener.exception.ListenerExecutionFailedException: Listener threw exception
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.wrapToListenerExecutionFailedExceptionIfNeeded(AbstractMessageListenerContainer.java:870)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:780)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:700)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$001(SimpleMessageListenerContainer.java:95)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$1.invokeListener(SimpleMessageListenerContainer.java:187)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.invokeListener(SimpleMessageListenerContainer.java:1187)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:681)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:1165)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:1149)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1100(SimpleMessageListenerContainer.java:95)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1312)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.amqp.AmqpException: No method found for class java.lang.String
at org.springframework.amqp.rabbit.listener.adapter.DelegatingInvocableHandler.getHandlerForPayload(DelegatingInvocableHandler.java:127)
at org.springframework.amqp.rabbit.listener.adapter.DelegatingInvocableHandler.getMethodNameFor(DelegatingInvocableHandler.java:224)
at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.getMethodAsString(HandlerAdapter.java:61)
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:138)
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:105)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:777)
... 10 common frames omitted