欢迎各位大牛指教

rabbitMQ

    MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列 的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求
 
与webservice和HttpClient的区别:
 
 
 

安装Rabbit MQ

Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang。通过下面两个连接下载安装3.2.3 版本:

  1. 下载并安装 Eralng OTP For Windows (vR16B03)    otp_win64_17.0.exe(erlang的环境)
  2. 运行安装 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 -->
posted @ 2016-08-23 13:30  夏沫秋至  阅读(227)  评论(0编辑  收藏  举报