SpringCloud RabbitMQ 搭建


layout: post
title: SpringCloud RabbitMQ basic(一)
date: 2018-04-12 16:09:30.000000000 +09:00
categories: [SpringCloud]
tag: SpringCloud


AMQP

在異步通訊中,消息不會立刻到達(dá)接收方,而是被存放到一個容器中,當(dāng)滿足一定的條件之后,消息會被容器發(fā)送給接收方,這個容器即消息隊列,而完成這個功能需要雙方和容器以及其中的各個組件遵守統(tǒng)一的約定和規(guī)則,AMQP就是這樣的一種協(xié)議,消息發(fā)送與接受的雙方遵守這個協(xié)議可以實現(xiàn)異步通訊。這個協(xié)議約定了消息的格式和工作方式。

RabbitMQ

AMQP 是一種協(xié)議, RabbitMQ是一個由erlang開發(fā)的AMQP的開源實現(xiàn),目前使用比較廣泛的MQ有RabbitMQ,ActiveMQ,KafKa等等,其中ActiveMQ是基于JMS的一個開源實現(xiàn),JMS 是一個接口標(biāo)準(zhǔn)或者說是一個API消息服務(wù)的規(guī)范(JAVA Message Service,java消息服務(wù)),KafKa是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),通常有吞吐量需求的日志處理和日志聚合應(yīng)用會使用Kafka,性能要優(yōu)于Rabbit,但是穩(wěn)定性和可靠性相對而言RabbitMQ要成熟一些。

安裝

下載Erlang:
http://www.erlang.org/downloads

下載rabbitMQ:
http://www.rabbitmq.com/download.html

安裝完成后進(jìn)行配置:

Erlang

首先需要保證ERLANG_HOME環(huán)境配置正確
在環(huán)境變量中添加 ERLANG_HOME的路勁,如D:\Program Files\erl6.3

   然后在PATH中添加%ERLANG_HOME%\bin

  在cmd中輸入erl ,如果能彈出erlang shell界面則表示配置正確了

rabbitMQ

配置RabbitMQ
打開命令行模式cmd:
cd C:\rabbitmq\RabbitMQ\Server\rabbitmq_server-3.0.0\sbin
依次輸入:
1. ./rabbitmq-plugins.bat enable rabbitmq_management
2. ./rabbitmq-service.bat stop
3.rabbitmq-service.bat install 這句話沒用,提示:RabbitMQ service is already present - onlyupdating service parameters
4. ./rabbitmq-service.bat start
重新 start install stop 在執(zhí)行第一個語句就能進(jìn)去網(wǎng)頁。
打開瀏覽器登錄:http://127.0.0.1:15672
55672好像也可以,直接跳轉(zhuǎn)到下列位置
http://127.0.0.1:15672/#/
賬號和密碼都是guest

http://p6b2ow781.bkt.clouddn.com/rabbitmq.png


Admin選顯卡,可以創(chuàng)建一個springcloud賬戶,tags是rabbitmq的角色分類。

http://p6b2ow781.bkt.clouddn.com/rabbitmq1.png

快速搭建基本工程

添加依賴

<dependencies>
        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-amqp</artifactId>
                <version>2.0.1.RELEASE</version>
            </dependency>
    </dependencies>

創(chuàng)建自己的springcloud賬戶

在admin選項卡中進(jìn)行創(chuàng)建

點擊創(chuàng)建好的賬戶,設(shè)置virtual hosts ,否則一會鏈接會出錯

http://p6b2ow781.bkt.clouddn.com/rabbitmq3.png

創(chuàng)建好的樣子

http://p6b2ow781.bkt.clouddn.com/rabbitmq2.png

配置yml文件

端口就是5672,不是15672,這個地方坑了我....

server:
  port: 6666
spring: 
  application:  
    name: cloud-rabbitmq
  rabbitmq:
    host: localhost
    port: 5672  #
    username: springcloud
    password: springcloud

配置消息生產(chǎn)者

import java.util.Date;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@Component
public class Sender {

    @Autowired 
    private AmqpTemplate rabbitTemplate;
    
    public void send() {
        String context = "hello" +new Date();
        System.out.println("sender:"+context);
        this.rabbitTemplate.convertAndSend("hello",context);
    }
}

配置消息消費者

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(queues="hello")
public class Receiver {

    @RabbitHandler
    public void process(String hello) {
        System.out.println("receiver:"+hello);
    }
}

配置基本配置類

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitConfig {

    @Bean
    public Queue helloQueue() {
        return new Queue("hello");
    }
}

創(chuàng)建測試類

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.example.demo.util.Sender;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitmqApplicationTests {

    @Autowired
    private Sender sender;
    @Test
    public void contextLoads() {
    }
    
    @Test
    public void hello() throws Exception{
        sender.send();
    }
     
}

項目結(jié)構(gòu)圖

http://p6b2ow781.bkt.clouddn.com/rabbitmq4.png

啟動項目

看到RabbitMQ Connections和Channels 連接條目

http://p6b2ow781.bkt.clouddn.com/rabbitmq5.png


在啟動測試類

控制臺輸出:sender:helloThu Apr 12 15:40:51 CST 2018

切換到主控制臺輸出:

receiver:helloThu Apr 12 15:40:51 CST 2018

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容