rabbitMQ
安装Rabbit MQ
Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang。通过下面两个连接下载安装3.2.3 版本:
- 下载并安装 Eralng OTP For Windows (vR16B03) otp_win64_17.0.exe(erlang的环境)
- 运行安装 Rabbit MQ Server Windows Installer (v3.2.3) rabbitmq-server-3.3.3.exe
安装OTP 18
默认安装的Rabbit MQ 监听端口是5672
进入命令行:
C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.3.3\sbin
(通过cmd命令跳转到rabbit MQ的安装路径下sbin目录下)
运行下面命令来启用管理插件:
rabbitmq-plugins enable rabbitmq_management
可以看到下面的输出
停止RabbitMQ服务:
rabbitmq-service stop
启动RabbitMQ服务:
rabbitmq-service start
查看插件命令:
rabbitmq-plugins list
可以看到下面的输出:
这就算是启用成功了。
需要注意的是:Mochiweb 必须得有,MochiWeb是一个用来构建Web应用的轻便,高效的HTTP应用框架的Erlang库
现在就可以访问他的视图化管理界面了 打开浏览器,输入http://localhost:15672/回车,会要求输入用户名和密码,用默认的guest/guest即可
输入用户名和密码,用默认的guest/guest即可
管理插件创建用户
设置权限,权限设置为administrator(管理员)
C:\Users\kk\AppData\Roaming\RabbitMQ\log
队列消息日志
pom.xml添加Jar包
<!-- RabbitMQ -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<!-- <version>3.0.4</version> -->
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
<!-- RabbitMQ -->
1: 融入web项目
生产者(发送消息):
1.配置spring-producer.xml
<!-- 连接服务配置 -->
<rabbit:connection-factory id="connectionFactory"
host="127.0.0.1" username="guest" password="guest" port="5672" />
<rabbit:admin connection-factory="connectionFactory" />
<!-- queue 队列声明 -->
<!-- durable=true,交换机持久化,rabbitmq服务重启交换机依然存在,保证不丢失; durable=false,相反 -->
<!-- auto-delete=true:无消费者时,队列自动删除; auto-delete=false:无消费者时,队列不会自动删除 -->
<!-- 排他性,exclusive=true:首次申明的connection连接下可见; exclusive=false:所有connection连接下都可见 -->
<rabbit:queue id="queue_li" durable="true" auto-delete="false"
exclusive="false" name="queue_li" />
<!-- exchange queue binging key 绑定 -->
<!-- durable=true,交换机持久化,rabbitmq服务重启交换机依然存在,保证不丢失; durable=false,相反 -->
<!-- auto-delete=true:无消费者时,队列自动删除; auto-delete=false:无消费者时,队列不会自动删除 -->
<rabbit:direct-exchange name="exchange_li"
durable="true" auto-delete="false" id="exchange_li">
<rabbit:bindings>
<rabbit:binding queue="queue_li" key="queue_key_li" />
</rabbit:bindings>
</rabbit:direct-exchange>
<!-- 创建一个消息模板 -->
<rabbit:template id="amqpTemplate" exchange="exchange_li"
connection-factory="connectionFactory" />
2.web.xml里加载spring-consumer.xml
3.创建一个生产者类
注入模板
@Autowired
private AmqpTemplate amqpTemplate;
4.定义一个方法将消息传输到消息队列中
@RequestMapping("sendOne")
@ResponseBody
public String SendOne(String message){
//第一个参数为队列key,第二参数为传输的值
amqpTemplate.convertAndSend("queue_key_li",message);
System.out.println("消息发送成功,发送消息为:"+message);
return "success";
}
生产者配置完成
消费者(处理请求),
1.pom.xml导入同样的jar包
2.创建一个消费者类,
定义实现MessageListener接口,并实现他的抽象类onMessage()
这个抽象方法是用来处理它接收到的请求的方法
public class ConsumerLitener implements MessageListener {
@Override
public void onMessage(Message arg0) {
String message = new String(arg0.getBody());
System.out.println("消息已经接收:"+ message);
}
}
3.创建一个spring-rabbit-consumer.xml
<!-- 连接服务配置 -->
<rabbit:connection-factory id="connectionFactory"
host="127.0.0.1" username="guest" password="guest" port="5672" />
<rabbit:admin connection-factory="connectionFactory" />
<!-- queue 队列声明 -->
<rabbit:queue id="queue_li" durable="true" auto-delete="false"
exclusive="false" name="queue_li" />
<!-- exchange queue binging key 绑定 -->
<rabbit:direct-exchange name="exchange_li"
durable="true" auto-delete="false" id="exchange_li">
<rabbit:bindings>
<rabbit:binding queue="queue_li" key="queue_key_li" />
</rabbit:bindings>
</rabbit:direct-exchange>
<!-- 定义消费者监听器 -->
<!-- 创建一个bean实例,bean实例中声明处理请求的类 -->
<bean id="consumerLitener" class="com.jk.rabbit.ConsumerLitener"></bean>
<rabbit:listener-container
connection-factory="connectionFactory" acknowledge="auto">
<!-- queues属性从那个队列中接收消息,ref属性是当存在消息是使用哪个类去处理 -->
<rabbit:listener queues="queue_li" ref="consumerLitener" />
</rabbit:listener-container>
4.web.xml加载spring-rabbit-consumer.xml文件
消费者配置完成
3: 如何新开一个消息
配置文件带背景色的代码一复制就完成了兄弟
接受方代码:
public class TestRe implements MessageListener{
@Override
public void onMessage(Message arg0) {
// TODO Auto-generated method stub
String message = new String(arg0.getBody());
System.out.println("消息已经接收:"+ message);
}
加配置文件spring-rabbitmq-consumer.xml
web.xml中加
<!-- 配置spring的核心配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-rabbitmq-consumer.xml</param-value>
</context-param>
<!-- 通过listenner监听器加载spring的核心处理类 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
发送方代码:
public class test {
public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext("src/main/resources/spring-rabbitmq-producer.xml");
AmqpTemplate amqpTemplate = (AmqpTemplate)context.getBean("amqpTemplate");
String message="抢手机";
amqpTemplate.convertAndSend("queue_key_li",message);
System.out.println("发消息"+message);
}
加配置文件:spring-rabbitmq-producer.xml
注意pom.xml中加jar包
<!-- RabbitMQ -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<!-- <version>3.0.4</version> -->
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
<!-- RabbitMQ -->
欢迎各位大牛一起交流QQ:898190483,新人一个继续努力