发送消息(所谓的生产者)
rabbitmq:
host: 127.0.0.1
listener:
acknowledge-mode: manual
password: 自己的密码
port: 5672
username: 自己的用户名
virtual-host: /develop(虚拟服务器,相当于权限设置)
mq配置类
@Configuration
public class RabbitConfig implements RabbitListenerConfigurer {
@Value("${rabbitmq.host}")
private String host;
@Value("${rabbitmq.port}")
private Integer port;
@Value("${rabbitmq.username}")
private String username;
@Value("${rabbitmq.password}")
private String password;
@Value("${rabbitmq.virtual-host}")
private String virtualHost;
@Bean
public ConnectionFactory connectionFactory(){
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host,port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(virtualHost);
return connectionFactory;
}
@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
return factory;
}
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
return new RabbitTemplate(connectionFactory);
}
@Override
public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) {
registrar.setContainerFactory(rabbitListenerContainerFactory());
}
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
}
}
发送消息:
注入 RabbitTemplate rabbitTemplate;
rabbitTemplate.convertAndSend("交换机名称", "绑定队列的routingKey",自己需要发的信息);
备注:消息最好使用,string,json,map等如果传入对象,那么对象必须在相同的目录下,名字并且相同
消费端:
配置交换机,配置队列
@EnableRabbit
@Component
public class MyRabbitMqConfig {
/**
* 交换机 点对点
*/
@Bean(name = "exchangeDirect")
public Exchange exchangeDirect() {
return new DirectExchange("exchange.direct", true, false);
}
/**
* 队列
*/
@Bean(name = "creditQueue")
public Queue creditQueue() {
return new Queue("credit.queue", true, false, false);
}
/**
*绑定队列
*/
@Bean
public Binding creditQueueBinding(@Qualifier("creditQueue") Queue creditQueue, @Qualifier("exchangeDirect") Exchange exchangeDirect) {
return BindingBuilder.bind(creditQueue).to(exchangeDirect).with("routingKey").noargs();
}
}
消息消费:创建监听器
@Component
public class RabbitMqClientListener {
@RabbitHandler
@RabbitListener(queues = "credit.queue") //你要监听的队列名称
public void test(String str, Channel channel, Message message) {
try {
creditService.process(str); //收到消息后需要处理的业务
} catch (Exception e) {
e.printStackTrace();
}
}
}