一、配置
package com.czq.amqp.rabbitmqdemo.config.amqp;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Scope;
@Configuration
public class AmqpConfig {
@Value("${spring.rabbitmq.addresses}")
private String addresses;
@Value("${spring.rabbitmq.virtual-host}")
private String virtualHost;
@Value("${spring.rabbitmq.username}")
private String userName;
@Value("${spring.rabbitmq.password}")
private String password;
public static final String PERSON_CONNECTIONFACTORY = "personConnectionFactory";
public static final String PERSON_LISTENERCONNECTIONFACTORY = "personListenerConnectionFactory";
@Bean(PERSON_CONNECTIONFACTORY)
@Primary
public ConnectionFactory lendConnectionFactory(){
CachingConnectionFactory connectionFactory = createConnectionFactory(addresses, virtualHost, userName, password);
return connectionFactory;
}
protected CachingConnectionFactory createConnectionFactory(String addresses, String virtualHost, String userName, String password){
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setAddresses(addresses);
connectionFactory.setVirtualHost(virtualHost);
connectionFactory.setUsername(userName);
connectionFactory.setPassword(password);
return connectionFactory;
}
@Bean(PERSON_LISTENERCONNECTIONFACTORY)
public SimpleRabbitListenerContainerFactory lendListenerConnectionFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,
@Qualifier(PERSON_CONNECTIONFACTORY) ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
@Bean("rabbitTemplate")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public RabbitTemplate rabbitTemplate(@Qualifier(PERSON_CONNECTIONFACTORY) ConnectionFactory lendConnectionFactory){
RabbitTemplate rabbitTemplate = new RabbitTemplate(lendConnectionFactory);
return rabbitTemplate;
}
public static final String EXCHANGE_PERSON = “exchange.person”;
public static final String QUEUE_TEST_PERSON = “queue.test.person”;
public static final String PERSON_TEST_KEY = “routingkey.queue.test.person.to.test”;
@Bean
public Queue queueTestPerson(){
return new Queue(QUEUE_TEST_PERSON);
}
@Bean
public DirectExchange exchangePerson(){
return new DirectExchange(EXCHANGE_PERSON);
}
@Bean
public Binding bindingExamineToPreQueueToLendExchange(Queue queueTestPerson,
DirectExchange exchangePerson){
return BindingBuilder.bind(queueTestPerson).to(exchangePerson).with(PERSON_TEST_KEY);
}
}
二、发送
package com.czq.amqp.rabbitmqdemo.controller;
import com.czq.amqp.rabbitmqdemo.config.amqp.AmqpPersonConfig;
import com.czq.amqp.rabbitmqdemo.config.amqp.AmqpPublicConfig;
import com.czq.amqp.rabbitmqdemo.service.LendMqService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
-
Created by Administrator on 2019/4/8.
*/
@RestController
public class RabbitController {@Autowired
private LendMqService lendMqService;@RequestMapping("/send")
public String send(){
lendMqService.send(AmqpPersonConfig.QUEUE_TEST_PERSON, “hello world!”);
return “ok”;
}
}
package com.czq.amqp.rabbitmqdemo.service;
import com.czq.amqp.rabbitmqdemo.config.amqp.AmqpPersonConfig;
import com.czq.amqp.rabbitmqdemo.config.amqp.AmqpPublicConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@Service
public class LendMqService extends LendMqAbstractService{
private static final Logger LOGGER = LoggerFactory.getLogger(LendMqService.class);
@Autowired
@Qualifier("rabbitTemplate")
private RabbitTemplate rabbitTemplate;
public void send(String queue, String context){
rabbitTemplate.convertAndSend(AmqpPersonConfig.EXCHANGE_PERSON, AmqpPersonConfig.PERSON_TEST_KEY, context);
}
}
三、接收
package com.czq.amqp.rabbitmqdemo.listener;
import com.czq.amqp.rabbitmqdemo.config.amqp.AmqpConfig;
import com.czq.amqp.rabbitmqdemo.config.amqp.AmqpPersonConfig;
import com.czq.amqp.rabbitmqdemo.config.amqp.AmqpPublicConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class RabbitmqConsumerListener {
private static final Logger logger = LoggerFactory.getLogger(RabbitmqConsumerListener.class);
@RabbitListener(queues = AmqpPersonConfig.QUEUE_TEST_PERSON, containerFactory = AmqpConfig.PERSON_LISTENERCONNECTIONFACTORY)
@RabbitHandler
public void test(String lendRequestId) {
logger.info("receive test message is {}",lendRequestId);
}
}
接收结果