windows安装
需要安装两个东西
1.Erlang(可以理解为有我才有他)
2.RabbitMQ-server
网址:RabbitMQ官方网址
1.进去之后往下拉,点击下面这个
2.进去右上角,点击install:windows
3.点击之后往下拉
重点:要下载的两个东西是有版本对应关系的,对应关系在supported version of Erlang里面。
Erlang下载地址就是途中的Erlang/OTP Version Tree,Rabbitmq下载地址在下面那个DownLoad里面都能看得见吧。
如果跟我一样不想麻烦,那就直接下载最新的,先点击,进去之后找最高版本,
点击那个windows64下载。
最后下载最下面框里面的rabbitmq-server.
4.安装
erl安装:选择路径后,一直next。
rabbitmq安装:点击之后可能反应比较慢,等一会就好了。
5.配置。
erl环境变量配置: 找到安装后的bin文件路径,复制
找到系统path路径扔里面。
rabbitmq-server配置:找到安装路径下的sbin文件,进入cmd
进去之后扔命令: rabbitmq-plugins enable rabbitmq_management
6.验证
http://127.0.0.1:15672
springboot整合Rabbitmq
1.新建两个模块
2.两个模块导入依赖
<!--整合mq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!--整合mq-->
3.两个模块都配置yml,初始账户密码为guest,guest,我这里做了增加,所以我的是root
增加的方法如下,进入rabbitmq的sbin目录的cmd下以此运行以下4行命令就好了。
rabbitmqctl add_user root root
rabbitmqctl set_user_tags root administrator
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
//查看用户命令
rabbitmqctl list_users
consumer的
quartz的
4.quartz当作生产者,生产东西。
那么我就需要配置一下队列,交换机,然后再把他们绑定一下,这是基础配置
package com.zsp.quartz.queue;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitmqConfig {
public static final String QUEUE_INFORM_EMAIL = "queue_inform_email";
public static final String QUEUE_INFORM_SMS = "queue_inform_sms";
public static final String EXCHANGE_TOPICS_INFORM="exchange_topics_inform";
public static final String ROUTINGKEY_EMAIL="inform.#.email.#";
public static final String ROUTINGKEY_SMS="inform.#.sms.#";
//声明交换机
@Bean(EXCHANGE_TOPICS_INFORM)
public Exchange EXCHANGE_TOPICS_INFORM(){
//durable(true) 持久化,mq重启之后交换机还在
return ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build();
}
//声明QUEUE_INFORM_EMAIL队列
@Bean(QUEUE_INFORM_EMAIL)
public Queue QUEUE_INFORM_EMAIL(){
return new Queue(QUEUE_INFORM_EMAIL);
}
//声明QUEUE_INFORM_SMS队列
@Bean(QUEUE_INFORM_SMS)
public Queue QUEUE_INFORM_SMS(){
return new Queue(QUEUE_INFORM_SMS);
}
//ROUTINGKEY_EMAIL队列绑定交换机,指定routingKey
@Bean
public Binding BINDING_QUEUE_INFORM_EMAIL(@Qualifier(QUEUE_INFORM_EMAIL) Queue queue,
@Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){
return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_EMAIL).noargs();
}
//ROUTINGKEY_SMS队列绑定交换机,指定routingKey
@Bean
public Binding BINDING_ROUTINGKEY_SMS(@Qualifier(QUEUE_INFORM_SMS) Queue queue,
@Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){
return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_SMS).noargs();
}
}
配置完后我就要发送了,写一个测试类,用来往指定的队列中发送数据
package com.zsp.quartz.queue;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestProducer {
@Autowired
RabbitTemplate rabbitTemplate;
@Test
public void Producer_topics_springbootTest() {
//使用rabbitTemplate发送消息
String message = "send email message to user";
/**
* 参数:
* 1、交换机名称
* 2、routingKey
* 3、消息内容
*/
rabbitTemplate.convertAndSend(RabbitmqConfig.EXCHANGE_TOPICS_INFORM, "inform.email", message);
}
}
开始写consumer消费者,有两个东西,一个是跟quarz一样的Rabbitmq基础配置,另一个就是监听队列消息,进行消费。
RabbitmqConfig
package com.zsp.consumer.queue;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitmqConfig {
public static final String QUEUE_INFORM_EMAIL = "queue_inform_email";
public static final String QUEUE_INFORM_SMS = "queue_inform_sms";
public static final String EXCHANGE_TOPICS_INFORM="exchange_topics_inform";
public static final String ROUTINGKEY_EMAIL="inform.#.email.#";
public static final String ROUTINGKEY_SMS="inform.#.sms.#";
//声明交换机
@Bean(EXCHANGE_TOPICS_INFORM)
public Exchange EXCHANGE_TOPICS_INFORM(){
//durable(true) 持久化,mq重启之后交换机还在
return ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build();
}
//声明QUEUE_INFORM_EMAIL队列
@Bean(QUEUE_INFORM_EMAIL)
public Queue QUEUE_INFORM_EMAIL(){
return new Queue(QUEUE_INFORM_EMAIL);
}
//声明QUEUE_INFORM_SMS队列
@Bean(QUEUE_INFORM_SMS)
public Queue QUEUE_INFORM_SMS(){
return new Queue(QUEUE_INFORM_SMS);
}
//ROUTINGKEY_EMAIL队列绑定交换机,指定routingKey
@Bean
public Binding BINDING_QUEUE_INFORM_EMAIL(@Qualifier(QUEUE_INFORM_EMAIL) Queue queue,
@Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){
return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_EMAIL).noargs();
}
//ROUTINGKEY_SMS队列绑定交换机,指定routingKey
@Bean
public Binding BINDING_ROUTINGKEY_SMS(@Qualifier(QUEUE_INFORM_SMS) Queue queue,
@Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){
return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_SMS).noargs();
}
}
ReceiveHandler
package com.zsp.consumer.queue;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class ReceiveHandler {
//监听email队列
@RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_EMAIL})
public void receive_email(Object msg, Message message, Channel channel){
System.out.println("QUEUE_INFORM_EMAIL msg"+msg);
}
//监听sms队列
@RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_SMS})
public void receive_sms(Object msg, Message message, Channel channel){
System.out.println("QUEUE_INFORM_SMS msg"+msg);
}
}
好的,生产者与消费者都写完之后,进入网址127.0.0.1:15672,进入之后把上面生产者的测试类运行起来
那么你就可以看到交换机这里出现了自己定义的交换机名称了
点击queues and Stream,你就会看到自己定义的两个队列,并且在email队列中,有一条消息等待消费
这个时候我们把consumer这个模块运行起来。
你会发现在控制台直接打印出来了生产者的那条消息,并且回看rabbitmq,那条记录已经消失了,说明被消费了。
以上就是全部内容,从安装到简单运用。觉得有用就点个赞吧。