簡體   English   中英

如何在 Java 中使用 spring.cloud 反序列化/序列化 Azure 服務總線

[英]How to deserialize/serialize Azure Service Bus using spring.cloud in Java

我正在使用 spring.cloud 連接到 Java 中的 Azure 服務總線。 這是我正在使用的 Maven 依賴項:

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-integration-servicebus</artifactId>
        <version>4.5.0</version>
    </dependency>

我能夠將隊列中的消息作為字節數組使用,並將消息轉換為字符串。 這是我從隊列收到消息后的主要代碼:

@ServiceActivator(inputChannel = INPUT_CHANNEL)
public void messageReceiver(byte[] payload, @Header(AzureHeaders.CHECKPOINTER) Checkpointer checkpointer) {
        String message = new String(payload);
        LOGGER.info("New message received: '{}'", message);
        checkpointer.success()
                .doOnSuccess(s -> LOGGER.info("Message '{}' successfully checkpointed", message))
                .doOnError(e -> LOGGER.error("Error found", e))
                .block();
    }

這是我在 JSON 中的示例數據作為簡短版本:

{
    "serverId": 123,
    "message": "{some message}"
}

我想做的是像這樣創建一個 Java 對象:

public class ExampleMessage {
    private final Integer serverId;
    private final String message;

當使用隊列中的消息時,它會將消息轉換為我的 Java 對象。 我習慣於使用 DataTypeProvider 以便將自定義 Java 對象用於 AMQP 消息消費,這將在后台轉換和驗證轉換。 spring.cloud.azure 是否具有用於反序列化的內置方法/功能? 或者我是否手動反序列化並驗證已使用的消息?

  • 在這里,我能夠使用Gson類將 Json 對象轉換為 java 對象。

  • 我只是從服務總線讀取消息並將其轉換為 java 對象。

我的 pom.xml(依賴項)

<dependency>  
 <groupId>org.springframework.boot</groupId>  
 <artifactId>spring-boot-starter</artifactId>  
</dependency>  
  
<dependency>  
 <groupId>org.springframework.boot</groupId>  
 <artifactId>spring-boot-starter-test</artifactId>  
 <scope>test</scope>  
</dependency>  
<dependency>  
 <groupId>com.google.code.gson</groupId>  
 <artifactId>gson</artifactId>  
 <version>2.8.6</version>  
</dependency>  
<dependency>  
 <groupId>com.azure</groupId>  
 <artifactId>azure-messaging-servicebus</artifactId>  
 <version>7.0.0</version>  
</dependency>  
<!-- https://mvnrepository.com/artifact/io.projectreactor/reactor-core -->  
<dependency>  
 <groupId>io.projectreactor</groupId>  
 <artifactId>reactor-core</artifactId>  
 <version>3.3.11.RELEASE</version>  
</dependency>

我的測試課:

public class TestClass {  
    public String name ;  
 public int version;  
  TestClass(String n , int v)  
    {  
        this.name = n ;  
 this.version = v ;  
  }  
}

主要類:

@SpringBootApplication  
public class ServicebustestApplication {  
  
   public static void main(String[] args) throws InterruptedException {  
  
  
      SpringApplication.run(ServicebustestApplication.class, args);  
  String  conn = " Endpoint=sb://v-mganorkarjsonobject.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=HglLVGlgMsYZGQMOtUfp4g2oka1CpCbVR0YEHgly7jA= ";  
  
  CountDownLatch countdownLatch1 = new CountDownLatch(1);  
  ServiceBusProcessorClient processorClient = new ServiceBusClientBuilder()  
            .connectionString("<Your COnnection String >")  
            .processor()  
            .queueName("test")  
            .processMessage(ServicebustestApplication::processMessage)  
            .processError(context -> processError(context,countdownLatch1))  
            .buildProcessorClient();  
  
  processorClient.start();  
  TimeUnit.SECONDS.sleep(10);  
  processorClient.close();  
  
  
  }  
  
   private static void processMessage(ServiceBusReceivedMessageContext context) {  
   
  ServiceBusReceivedMessage message = context.getMessage();  
  
  System.out.printf("Processing message. Session: %s, Sequence #: %s. Contents: %s%n", message.getMessageId(),  
  message.getSequenceNumber(), message.getBody());  
  
  Gson gson = new Gson();  
  
  TestClass testobject = gson.fromJson(String.valueOf(message.getBody()),TestClass.class);  
  
  System.out.println("name: "+testobject.name +" version: "+ testobject.version+"");  
  }  



   private static void processError(ServiceBusErrorContext context, CountDownLatch countdownLatch) {  
   
  }  
}

這里處理消息的回調將處理消息,然后我們可以使用 GSON 將 json 字符串轉換為 java 對象。


  Gson gson = new Gson();  
  
  TestClass testobject = gson.fromJson(String.valueOf(message.getBody()),TestClass.class);

代碼輸出:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM