日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

下单消息的发送和接收案例

發布時間:2024/4/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 下单消息的发送和接收案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

案例

接下來我們模擬一種場景: 下單成功之后,向下單用戶發送短信。設計圖如下:

訂單微服務發送消息

1 在shop-order 中添加rocketmq的依賴

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud-alibaba</artifactId><groupId>com.leon</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>shop-order</artifactId><dependencies> <!--rocketmq--><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.2</version></dependency><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.4.0</version></dependency></dependencies></project>

2 添加配置

#rocketmq rocketmq:name-server: 192.168.109.131:9876 #rocketMQ服務的地址producer:group: shop-order # 生產者組

3 編寫測試代碼

package com.leon.controller;import com.alibaba.fastjson.JSON; import com.leon.domain.Order; import com.leon.domain.Product; import com.leon.service.OrderService; import com.leon.service.ProductService; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.messaging.support.MessageBuilder; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;import java.util.List; import java.util.Random;//@RestController @Slf4j public class OrderController {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate OrderService orderService;@Autowiredprivate ProductService productService;@Autowiredprivate DiscoveryClient discoveryClient;@Autowiredprivate RocketMQTemplate rocketMQTemplate;//下單--fegin@RequestMapping("/order/prod/{pid}")public Order order(@PathVariable("pid") Integer pid) {log.info("接收到{}號商品的下單請求,接下來調用商品微服務查詢此商品信息", pid);//調用商品微服務,查詢商品信息Product product = productService.findByPid(pid);if (product.getPid() == -100) {Order order = new Order();order.setOid(-100L);order.setPname("下單失敗");return order;}log.info("查詢到{}號商品的信息,內容是:{}", pid, JSON.toJSONString(product));//下單(創建訂單)Order order = new Order();order.setUid(1);order.setUsername("測試用戶");order.setPid(pid);order.setPname(product.getPname());order.setPprice(product.getPprice());order.setNumber(1);orderService.createOrder(order);log.info("創建訂單成功,訂單信息為{}", JSON.toJSONString(order));//向mq中投遞一個下單成功的消息//參數一: 指定topic//參數二: 指定消息體rocketMQTemplate.convertAndSend("order-topic", order);return order;}}

用戶微服務訂閱消息

1 修改shop-user 模塊配置

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud-alibaba</artifactId><groupId>com.leon</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>shop-user</artifactId><dependencies><!--springboot-web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--shop-common--><dependency><groupId>com.leon</groupId><artifactId>shop-common</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.2</version></dependency><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.4.0</version></dependency><!--短信發送--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alicloud-sms</artifactId></dependency></dependencies></project>

2 修改主類

package com.leon;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication @EnableDiscoveryClient public class UserApplication {public static void main(String[] args) {SpringApplication.run(UserApplication.class);} }

3 修改配置文件

server:port: 8071 spring:application:name: service-userdatasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql:///shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=trueusername: rootpassword: rootjpa:properties:hibernate:hbm2ddl:auto: updatedialect: org.hibernate.dialect.MySQL5InnoDBDialectcloud:nacos:discovery:server-addr: 127.0.0.1:8848 #rocketmq rocketmq:name-server: 192.168.109.131:9876

4 編寫消息接收服務

package com.leon.service;import com.alibaba.fastjson.JSON; import com.leon.dao.UserDao; import com.leon.domain.Order; import com.leon.domain.User; import com.leon.utils.SmsUtil; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.annotation.ConsumeMode; import org.apache.rocketmq.spring.annotation.MessageModel; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.util.Random;@Slf4j @Service("shopSmsService") //consumerGroup-消費者組名 topic-要消費的主題 @RocketMQMessageListener(consumerGroup = "shop-user", //消費者組名topic = "order-topic",//消費主題consumeMode = ConsumeMode.CONCURRENTLY,//消費模式,指定是否順序消費 CONCURRENTLY(同步,默認) ORDERLY(順序)messageModel = MessageModel.CLUSTERING//消息模式 BROADCASTING(廣播) CLUSTERING(集群,默認) ) public class SmsService implements RocketMQListener<Order> {@Autowiredprivate UserDao userDao;//消費邏輯@Overridepublic void onMessage(Order message) {log.info("接收到了一個訂單信息{},接下來就可以發送短信通知了", message);//根據uid 獲取手機號User user = userDao.findById(message.getUid()).get();//生成驗證碼 1-9 6StringBuilder builder = new StringBuilder();for (int i = 0; i < 6; i++) {builder.append(new Random().nextInt(9) + 1);}String smsCode = builder.toString();Param param = new Param(smsCode);try {//發送短信 {"code":"123456"}SmsUtil.sendSms(user.getTelephone(), "黑馬旅游網", "SMS_170836451", JSON.toJSONString(param));log.info("短信發送成功");} catch (Exception e) {e.printStackTrace();}}@Data@AllArgsConstructor@NoArgsConstructorclass Param {private String code;} }

5 啟動服務,執行下單操作,觀看后臺輸出

?

總結

以上是生活随笔為你收集整理的下单消息的发送和接收案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。