RabbitMQ是實現了高級消息隊列協議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。RabbitMQ服務器是用Erlang語言編寫的,而羣集和故障轉移是構建在開放電信平臺框架上的。全部主要的編程語言均有與代理接口通信的客戶端庫。html
Erlang是一種通用的面向併發的編程語言,它由瑞典電信設備製造商愛立信所轄的CS-Lab開發,目的是創造一種能夠應對大規模併發活動的編程語言和運行環境。web
更多應用場景redis
RabbitMQ 就是一個高併發消息隊列,當看到消息隊列的時候就想到了redis也能實現消息隊列呀,參考了一些其餘博客發現這二者仍是有些區別的。spring
rabbitMQ與redis的區別docker
version: '3.1'
services:
rabbitmq:
restart: always
image: rabbitmq:management
container_name: rabbitmq
ports:
#服務端口
- 5672:5672
#web頁端口
- 15672:15672
environment:
RABBITMQ_DEFAULT_USER: rabbit
RABBITMQ_DEFAULT_PASS: 123456
volumes:
- ./data:/var/lib/rabbitmq
複製代碼
RabbitMQ web管理端地址 http:/ip:15672編程
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
複製代碼
spring:
rabbitmq:
host: 119.3.252.69
port: 5672
username: rabbit
password: 123456
複製代碼
@Configuration
public class RabbitMQConfig {
/**
* 建立一個消息隊列
* @return
*/
@Bean
public Queue queue(){
//建立名稱爲testRabbitQueue的消息隊列
return new Queue("testRabbitQueue");
}
}
複製代碼
/**
* 消息生產者
*/
@RestController
public class RabbitQMController {
@Autowired
private AmqpTemplate amqpTemplate;
@RequestMapping(value = "sendMQ",method = RequestMethod.POST)
public String sendMQ(String message){
//將消息放入隊列
amqpTemplate.convertAndSend("testRabbitQueue", message);
return "send"+message+"成功";
}
}
複製代碼
/**
* 消息消費者
*/
@Component
@RabbitListener(queues = "testRabbitQueue")
public class RabbitMQConsumer {
@RabbitHandler
public void process(String message){
System.out.println("我是消費者我要累死了這是消息內容-----"+message);
}
}
複製代碼
當消息隊列中有數據時會將消息下發到各個消費者手上處理json
Quartz 是一個任務調度框架api
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
複製代碼
@Component
public class SendRabbitMQQuartz {
@Autowired
private RabbitQMController rabbitQMController;
/**
* 每分鐘插入1000條消息
*/
@Scheduled(cron = "0 0/1 * * * ? ")
public void sendRabbitMQ(){
for (int i=0 ; i<1000 ; i++){
rabbitQMController.sendMQ("我是消息"+i);
}
System.out.println(new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date()));
}
/**
* 每30秒打印信息
*/
@Scheduled(cron = "0/30 * * * * ? ")
public void printTime(){
System.out.println(new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(new Date()));
}
}
複製代碼
cron表達式在線生成器bash
@EnableScheduling服務器
Swagger 是一個規範和完整的框架,用於生成、描述、調用和可視化 RESTful 風格的 Web 服務。整體目標是使客戶端和文件系統做爲服務器以一樣的速度來更新。文件的方法,參數和模型緊密集成到服務器端的代碼,容許API來始終保持同步。
做用:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
複製代碼
@EnableSwagger2
@Configuration
public class Swagger2Config {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//接口所在包路徑
.apis(RequestHandlerSelectors.basePackage("com.fjhckj.springcloudrabbitmq.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("rabbitMQ API 文檔")
.description("rabbitMQ API 接口文檔")
.version("1.0.0")
.build();
}
}
複製代碼
/**
* 消息生產者
*/
//描述類
@Api(value = "RabbitMQ消息生產者")
@RestController
public class RabbitQMController {
@Autowired
private AmqpTemplate amqpTemplate;
//描述方法
@ApiOperation(value = "消息生成rest接口")
//描述參數
@ApiImplicitParams({
@ApiImplicitParam(name = "message", value = "消息內容", required = true, dataTypeClass = String.class, paramType = "String"),
})
@RequestMapping(value = "sendMQ",method = RequestMethod.POST)
public String sendMQ(String message){
amqpTemplate.convertAndSend("testRabbitQueue", message);
return "send"+message+"成功";
}
}
複製代碼
@Api:用在類上,說明該類的做用。
@ApiOperation:註解來給API增長方法說明。
@ApiImplicitParams : 用在方法上包含一組參數說明。
@ApiImplicitParam:用來註解來給方法入參增長說明。
@ApiResponses:用於表示一組響應
@ApiResponse:用在@ApiResponses中,通常用於表達一個錯誤的響應信息
l code:數字,例如400
l message:信息,例如"請求參數沒填好"
l response:拋出異常的類
複製代碼
@ApiModel:描述一個Model的信息(通常用在請求參數沒法使用@ApiImplicitParam註解進行描述的時候)
l @ApiModelProperty:描述一個model的屬性
複製代碼
http://ip:port/swagger-ui.html
這幾個東西單純記錄下使用方式互相直接並沒有依賴關係。