亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringCloud Stream使用解析

 更新時(shí)間:2021年03月31日 09:33:36   作者:鍵盤(pán)歌唱家  
這篇文章主要介紹了SpringCloud Stream介紹,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

SpringCloudStream

官方定義Spring Cloud Stream 是一個(gè)構(gòu)建消息驅(qū)動(dòng)微服務(wù)的框架。
應(yīng)用通過(guò)inputs和outputs來(lái)與Spring Cloud Stream中binder對(duì)象交互。通過(guò)我們配置來(lái)binding(綁定),而Spring Cloud Stream中的binder對(duì)象負(fù)責(zé)與消息中間件交互。所以,我們只需要搞清楚如何與Spring Cloud Stream 交互就可以方便使用消息驅(qū)動(dòng)的方式。
通過(guò)使用Spring Integration來(lái)連接消息代理中間件以及實(shí)現(xiàn)消息事件驅(qū)動(dòng)。
目前僅支持RabbitMQ和kafka

下面用RabbitMQ來(lái)說(shuō)明使用!

案例之消息驅(qū)動(dòng)之生產(chǎn)者

1.建一個(gè)項(xiàng)目,并添加如下的依賴(lài):

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>

2.編寫(xiě)下面的yml文件

server:
 port: 8801

spring:
 application:
  name: cloud-stream-provider
 rabbitmq:
  host: 192.168.43.76
  port: 5672
  username: guest
  password: guest
 cloud:
  stream:
   binders: # 在此處配置要綁定的rabbitmq的服務(wù)信息;
    defaultRabbit: # 表示定義的名稱(chēng),用于于binding整合
     type: rabbit # 消息組件類(lèi)型
#     environment: # 設(shè)置rabbitmq的相關(guān)的環(huán)境配置,(本機(jī)方式)
#      spring:
#       rabbitmq:
#        host: localhost
#        port: 5672
#        username: guest
#        password: guest
   bindings: # 服務(wù)的整合處理
    output: # 這個(gè)名字是一個(gè)通道的名稱(chēng)
     destination: studyExchange # 表示要使用的Exchange名稱(chēng)定義
     content-type: application/json # 設(shè)置消息類(lèi)型,本次為json,文本則設(shè)置“text/plain”
     binder: defaultRabbit # 設(shè)置要綁定的消息服務(wù)的具體設(shè)置(爆紅不要管)

eureka:
 client: # 客戶(hù)端進(jìn)行Eureka注冊(cè)的配置
  service-url:
   defaultZone: http://localhost:7001/eureka
 instance:
  lease-renewal-interval-in-seconds: 2 # 設(shè)置心跳的時(shí)間間隔(默認(rèn)是30秒)
  lease-expiration-duration-in-seconds: 5 # 如果現(xiàn)在超過(guò)了5秒的間隔(默認(rèn)是90秒)
  instance-id: send-8801.com # 在信息列表時(shí)顯示主機(jī)名稱(chēng)
  prefer-ip-address: true   # 訪(fǎng)問(wèn)的路徑變?yōu)镮P地址

3.編寫(xiě)service,下面僅展示實(shí)現(xiàn)類(lèi):

import org.lzl.springcloud.service.IMessageProvider;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.support.MessageBuilder;
import javax.annotation.Resource;
import java.util.UUID;


//注意這里不需要寫(xiě)@Service,因?yàn)樵搒ervice是跟rabbitmq打交道的
@EnableBinding(Source.class)//定義消息的推送管道
public class MessageProviderImpl implements IMessageProvider {

  @Resource
  private MessageChannel output;

  @Override
  public String send() {
    String serial = UUID.randomUUID().toString();
    output.send(MessageBuilder.withPayload(serial).build());
    System.out.println("*****serial:"+serial);
    return null;
  }
}

4.編寫(xiě)controller

import org.lzl.springcloud.service.IMessageProvider;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;

@RestController
public class SendMessageController {
  @Resource
  private IMessageProvider messageProvider;

  @GetMapping(value = "/sendMessage")
  public String sendMessage(){
    return messageProvider.send();
  }
}

案例之消息驅(qū)動(dòng)消費(fèi)者

1.寫(xiě)pom,加上下面的依賴(lài)

	<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

2.編寫(xiě)yml,和生產(chǎn)者唯一的區(qū)別在于,下面是input

server:
 port: 8802

spring:
 application:
  name: cloud-stream-consumer
 rabbitmq:
  host: 192.168.43.76
  port: 5672
  username: guest
  password: guest
 cloud:
  stream:
   binders: # 在此處配置要綁定的rabbitmq的服務(wù)信息;
    defaultRabbit: # 表示定義的名稱(chēng),用于于binding整合
     type: rabbit # 消息組件類(lèi)型
#     environment: # 設(shè)置rabbitmq的相關(guān)的環(huán)境配置
#      spring:
#       rabbitmq:
#        host: localhost
#        port: 5672
#        username: guest
#        password: guest
   bindings: # 服務(wù)的整合處理
    input: # 這個(gè)名字是一個(gè)通道的名稱(chēng)
     destination: studyExchange # 表示要使用的Exchange名稱(chēng)定義
     content-type: application/json # 設(shè)置消息類(lèi)型,本次為對(duì)象json,如果是文本則設(shè)置“text/plain”
     binder: defaultRabbit # 設(shè)置要綁定的消息服務(wù)的具體設(shè)置



eureka:
 client: # 客戶(hù)端進(jìn)行Eureka注冊(cè)的配置
  service-url:
   defaultZone: http://localhost:7001/eureka
 instance:
  lease-renewal-interval-in-seconds: 2 # 設(shè)置心跳的時(shí)間間隔(默認(rèn)是30秒)
  lease-expiration-duration-in-seconds: 5 # 如果現(xiàn)在超過(guò)了5秒的間隔(默認(rèn)是90秒)
  instance-id: receive-8802.com # 在信息列表時(shí)顯示主機(jī)名稱(chēng)
  prefer-ip-address: true   # 訪(fǎng)問(wèn)的路徑變?yōu)镮P地址

3.編寫(xiě)controller,該controller不向外界暴露端口,起到實(shí)時(shí)監(jiān)控消息管道的作用!

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Sink;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@Component
@EnableBinding(Sink.class)
public class ReceiveMessageListenerController {
  @Value("${server.port}")
  private String serverPort;

  @StreamListener(Sink.INPUT)//只要8801發(fā)送消息,8802就會(huì)接收到8801的消息
  public void input(Message<String> message){
    System.out.println("消費(fèi)者1號(hào)--------》接收到的消息:"+message.getPayload()+"\t port: "+serverPort);
  }

}

測(cè)試

啟動(dòng)rabbitMQ和上面的兩個(gè)項(xiàng)目,訪(fǎng)問(wèn)http://localhost:8801/sendMessage
在消費(fèi)者的控制臺(tái)中就會(huì)出現(xiàn)下面的訂單流水號(hào):

在這里插入圖片描述

補(bǔ)充說(shuō)明

我們打開(kāi)rabbitmq的監(jiān)控界面:發(fā)現(xiàn)默認(rèn)是幫我們分組的

在這里插入圖片描述

想要自定義分組只需要在消費(fèi)者的yml文件中加上下面的一行:

在這里插入圖片描述

如果有多個(gè)消費(fèi)者,為了避免出現(xiàn)重復(fù)消費(fèi)的問(wèn)題,應(yīng)將組名設(shè)置成一樣的。一個(gè)組的成員輪循消費(fèi),不同組的成員進(jìn)行相同的消費(fèi)。

到此這篇關(guān)于SpringCloud Stream介紹的文章就介紹到這了,更多相關(guān)SpringCloud Stream介紹內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中?SLF4J和Logback和Log4j和Logging的區(qū)別與聯(lián)系

    Java中?SLF4J和Logback和Log4j和Logging的區(qū)別與聯(lián)系

    這篇文章主要介紹了Java中?SLF4J和Logback和Log4j和Logging的區(qū)別與聯(lián)系,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考幾種,感興趣的小伙伴可以參考一下
    2022-09-09
  • Spring Aware源碼設(shè)計(jì)示例解析

    Spring Aware源碼設(shè)計(jì)示例解析

    這篇文章主要為大家介紹了Spring Aware源碼設(shè)計(jì)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 淺析java中Pair和Map的區(qū)別

    淺析java中Pair和Map的區(qū)別

    這篇文章主要介紹了java中Pair和Map的區(qū)別,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • springboot斷言異常封裝與統(tǒng)一異常處理實(shí)現(xiàn)代碼

    springboot斷言異常封裝與統(tǒng)一異常處理實(shí)現(xiàn)代碼

    異常處理其實(shí)一直都是項(xiàng)目開(kāi)發(fā)中的大頭,但關(guān)注異常處理的人一直都特別少,下面這篇文章主要給大家介紹了關(guān)于springboot斷言異常封裝與統(tǒng)一異常處理的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • SpringBoot集成Redisson實(shí)現(xiàn)分布式鎖的方法示例

    SpringBoot集成Redisson實(shí)現(xiàn)分布式鎖的方法示例

    這篇文章主要介紹了SpringBoot集成Redisson實(shí)現(xiàn)分布式鎖的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • SpringMVC中文件的上傳與下載詳細(xì)解析

    SpringMVC中文件的上傳與下載詳細(xì)解析

    這篇文章主要介紹了SpringMVC中文件的上傳與下載詳細(xì)解析,在開(kāi)發(fā)中有遇到文件上傳下載的功能需求,今天就來(lái)說(shuō)一下前后端的實(shí)現(xiàn)和要注意的地方,需要的朋友可以參考下
    2024-01-01
  • springboot+dubbo啟動(dòng)項(xiàng)目時(shí)報(bào)錯(cuò) zookeeper not connected的問(wèn)題及解決方案

    springboot+dubbo啟動(dòng)項(xiàng)目時(shí)報(bào)錯(cuò) zookeeper not connect

    這篇文章主要介紹了springboot+dubbo項(xiàng)目啟動(dòng)項(xiàng)目時(shí)報(bào)錯(cuò) zookeeper not connected的問(wèn)題,本文給大家定位問(wèn)題及解決方案,結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Springboot整合MongoDB的Docker開(kāi)發(fā)教程全解

    Springboot整合MongoDB的Docker開(kāi)發(fā)教程全解

    這篇文章主要介紹了Springboot整合MongoDB的Docker開(kāi)發(fā),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2020-07-07
  • java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解

    java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解

    這篇文章主要為大家介紹了java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Spring定時(shí)任務(wù)使用及如何使用郵件監(jiān)控服務(wù)器

    Spring定時(shí)任務(wù)使用及如何使用郵件監(jiān)控服務(wù)器

    這篇文章主要介紹了Spring定時(shí)任務(wù)使用及如何使用郵件監(jiān)控服務(wù)器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論