精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot分布式事務之最大努力通知

開發 前端 分布式
最大努力通知方案的目標 :發起通知方通過一定的機制最大努力將業務處理結果通知到接收方。

[[393657]]

環境:springboot.2.4.9 + RabbitMQ3.7.4

什么是最大努力通知

這是一個充值的案例

交互流程 :

1、賬戶系統調用充值系統接口。

2、充值系統完成支付向賬戶系統發起充值結果通知 若通知失敗,則充值系統按策略進行重復通知。

3、賬戶系統接收到充值結果通知修改充值狀態。

4、賬戶系統未接收到通知會主動調用充值系統的接口查詢充值結果。

通過上邊的例子我們總結最大努力通知方案的目標 : 發起通知方通過一定的機制最大努力將業務處理結果通知到接收方。 具體包括 :

1、有一定的消息重復通知機制。 因為接收通知方可能沒有接收到通知,此時要有一定的機制對消息重復通知。

2、消息校對機制。 如果盡最大努力也沒有通知到接收方,或者接收方消費消息后要再次消費,此時可由接收方主動向通知方查詢消息信息來滿足需求。

最大努力通知與可靠消息一致性有什么不同?

1、解決方案思想不同 可靠消息一致性,發起通知方需要保證將消息發出去,并且將消息發到接收通知方,消息的可靠性關鍵由發起通知方來保證。 最大努力通知,發起通知方盡最大的努力將業務處理結果通知為接收通知方,但是可能消息接收不到,此時需要接收通知方主動調用發起通知方的接口查詢業務處理結果,通知的可靠性關鍵在接收通知方。

2、兩者的業務應用場景不同 可靠消息一致性關注的是交易過程的事務一致,以異步的方式完成交易。 最大努力通知關注的是交易后的通知事務,即將交易結果可靠的通知出去。

3、技術解決方向不同 可靠消息一致性要解決消息從發出到接收的一致性,即消息發出并且被接收到。 最大努力通知無法保證消息從發出到接收的一致性,只提供消息接收的可靠性機制。可靠機制是,最大努力地將消息通知給接收方,當消息無法被接收方接收時,由接收方主動查詢消費。

通過RabbitMQ實現最大努力通知

關于RabbitMQ相關文章《SpringBoot RabbitMQ消息可靠發送與接收 》,《RabbitMQ消息確認機制confirm 》。

 

項目結構

兩個子模塊users-mananger(賬戶模塊),pay-manager(支付模塊)

依賴

  1. <dependency> 
  2.  <groupId>org.springframework.boot</groupId> 
  3.  <artifactId>spring-boot-starter-data-jpa</artifactId> 
  4. </dependency> 
  5. <dependency> 
  6.  <groupId>org.springframework.boot</groupId> 
  7.  <artifactId>spring-boot-starter-web</artifactId> 
  8. </dependency> 
  9. <dependency> 
  10.  <groupId>org.springframework.boot</groupId> 
  11.  <artifactId>spring-boot-starter-amqp</artifactId> 
  12. </dependency> 
  13. <dependency> 
  14.  <groupId>mysql</groupId> 
  15.  <artifactId>mysql-connector-java</artifactId> 
  16.  <scope>runtime</scope> 
  17. </dependency> 

子模塊pay-manager

配置文件

  1. server: 
  2.   port: 8080 
  3. --- 
  4. spring: 
  5.   rabbitmq: 
  6.     host: localhost 
  7.     port: 5672 
  8.     username: guest 
  9.     password: guest 
  10.     virtual-host: / 
  11.     publisherConfirmType: correlated 
  12.     publisherReturns: true 
  13.     listener: 
  14.       simple: 
  15.         concurrency: 5 
  16.         maxConcurrency: 10 
  17.         prefetch: 5 
  18.         acknowledgeMode: MANUAL 
  19.         retry: 
  20.           enabled: true 
  21.           initialInterval: 3000 
  22.           maxAttempts: 3 
  23.         defaultRequeueRejected: false 

實體類

記錄充值金額及賬戶信息

  1. @Entity 
  2. @Table(name = "t_pay_info"
  3. public class PayInfo implements Serializable
  4.  @Id 
  5.  private Long id; 
  6.  private BigDecimal money ; 
  7.  private Long accountId ; 
  8. }   

DAO及Service

  1. public interface PayInfoRepository extends JpaRepository<PayInfo, Long> { 
  2.  PayInfo findByOrderId(String orderId) ; 
  1. @Service 
  2. public class PayInfoService { 
  3.      
  4.     @Resource 
  5.     private PayInfoRepository payInfoRepository ; 
  6.     @Resource 
  7.     private RabbitTemplate rabbitTemplate ; 
  8.      
  9.   // 數據保存完后發送消息(這里發送消息可以應用確認模式或事物模式) 
  10.     @Transactional 
  11.     public PayInfo savePayInfo(PayInfo payInfo) { 
  12.         payInfo.setId(System.currentTimeMillis()) ; 
  13.         PayInfo result = payInfoRepository.save(payInfo) ; 
  14.         CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString().replaceAll("-""")) ; 
  15.         try { 
  16.             rabbitTemplate.convertAndSend("pay-exchange""pay.#", new ObjectMapper().writeValueAsString(payInfo), correlationData) ; 
  17.         } catch (AmqpException | JsonProcessingException e) { 
  18.             e.printStackTrace(); 
  19.         } 
  20.         return result ; 
  21.     } 
  22.      
  23.     public PayInfo queryByOrderId(String orderId) { 
  24.         return payInfoRepository.findByOrderId(orderId) ; 
  25.     } 
  26.      

支付完成后發送消息。

Controller接口

  1. @RestController 
  2. @RequestMapping("/payInfos"
  3. public class PayInfoController { 
  4.  @Resource 
  5.  private PayInfoService payInfoService ; 
  6.      
  7.   // 支付接口 
  8.  @PostMapping("/pay"
  9.  public Object pay(@RequestBody PayInfo payInfo) { 
  10.   payInfoService.savePayInfo(payInfo) ; 
  11.   return "支付已提交,等待結果" ; 
  12.  } 
  13.      
  14.  @GetMapping("/queryPay"
  15.  public Object queryPay(String orderId) { 
  16.   return payInfoService.queryByOrderId(orderId) ; 
  17.  } 
  18.      

子模塊users-manager

應用配置

  1. server: 
  2.   port: 8081 
  3. --- 
  4. spring: 
  5.   rabbitmq: 
  6.     host: localhost 
  7.     port: 5672 
  8.     username: guest 
  9.     password: guest 
  10.     virtual-host: / 
  11.     publisherConfirmType: correlated 
  12.     publisherReturns: true 
  13.     listener: 
  14.       simple: 
  15.         concurrency: 5 
  16.         maxConcurrency: 10 
  17.         prefetch: 5 
  18.         acknowledgeMode: MANUAL 
  19.         retry: 
  20.           enabled: true 
  21.           initialInterval: 3000 
  22.           maxAttempts: 3 
  23.         defaultRequeueRejected: false 

實體類

  1. @Entity 
  2. @Table(name = "t_users"
  3. public class Users { 
  4.  @Id 
  5.  private Long id; 
  6.  private String name ; 
  7.  private BigDecimal money ; 
  8. }   

賬戶信息表

  1. @Entity 
  2. @Table(name = "t_users_log"
  3. public class UsersLog { 
  4.  @Id 
  5.  private Long id; 
  6.  private String orderId ; 
  7.  // 0: 支付中,1:已支付,2:已取消 
  8.  @Column(columnDefinition = "int default 0"
  9.  private Integer status = 0 ; 
  10.  private BigDecimal money ; 
  11.  private Date createTime ; 

賬戶充值記錄表(去重)

DAO及Service

  1. public interface UsersRepository extends JpaRepository<Users, Long> { 
  2. public interface UsersLogRepository extends JpaRepository<UsersLog, Long> { 
  3.  UsersLog findByOrderId(String orderId) ; 

Service類

  1. @Service 
  2. public class UsersService {  
  3.     @Resource 
  4.     private UsersRepository usersRepository ; 
  5.     @Resource 
  6.     private UsersLogRepository usersLogRepository ; 
  7.      
  8.  @Transactional 
  9.  public boolean updateMoneyAndLogStatus(Long id, String orderId) { 
  10.   UsersLog usersLog = usersLogRepository.findByOrderId(orderId) ; 
  11.   if (usersLog != null && 1 == usersLog.getStatus()) { 
  12.    throw new RuntimeException("已支付") ; 
  13.   } 
  14.   Users users = usersRepository.findById(id).orElse(null) ; 
  15.   if (users == null) { 
  16.    throw new RuntimeException("賬戶不存在") ; 
  17.   } 
  18.   users.setMoney(users.getMoney().add(usersLog.getMoney())) ; 
  19.   usersRepository.save(users) ; 
  20.   usersLog.setStatus(1) ; 
  21.   usersLogRepository.save(usersLog) ; 
  22.   return true ; 
  23.  } 
  24.      
  25.  @Transactional 
  26.  public boolean saveLog(UsersLog usersLog) { 
  27.   usersLog.setId(System.currentTimeMillis()) ; 
  28.   usersLogRepository.save(usersLog) ; 
  29.   return true ; 
  30.  } 

消息監聽

  1. @Component 
  2. public class PayMessageListener { 
  3.      
  4.  private static final Logger logger = LoggerFactory.getLogger(PayMessageListener.class) ; 
  5.      
  6.  @Resource 
  7.  private  UsersService usersService ; 
  8.      
  9.  @SuppressWarnings("unchecked"
  10.  @RabbitListener(queues = {"pay-queue"}) 
  11.  @RabbitHandler 
  12.  public void receive(Message message, Channel channel) { 
  13.   long deliveryTag = message.getMessageProperties().getDeliveryTag() ; 
  14.   byte[] buf =  null ; 
  15.   try { 
  16.    buf = message.getBody() ; 
  17.    logger.info("接受到消息:{}", new String(buf, "UTF-8")) ; 
  18.    Map<String, Object> result = new JsonMapper().readValue(buf, Map.class) ; 
  19.    Long id = ((Integer) result.get("accountId")) + 0L ; 
  20.    String orderId = (String) result.get("orderId") ; 
  21.    usersService.updateMoneyAndLogStatus(id, orderId) ; 
  22.    channel.basicAck(deliveryTag, true) ; 
  23.   } catch (Exception e) { 
  24.    logger.error("消息接受出現異常:{}, 異常消息:{}", e.getMessage(), new String(buf, Charset.forName("UTF-8"))) ; 
  25.    e.printStackTrace() ; 
  26.    try { 
  27.     // 應該將這類異常的消息放入死信隊列中,以便人工排查。 
  28.     channel.basicReject(deliveryTag, false); 
  29.    } catch (IOException e1) { 
  30.     logger.error("拒絕消息重入隊列異常:{}", e1.getMessage()) ; 
  31.     e1.printStackTrace(); 
  32.    } 
  33.   } 
  34.  } 

Controller接口

  1. @RestController 
  2. @RequestMapping("/users"
  3. public class UsersController { 
  4.      
  5.     @Resource 
  6.     private RestTemplate restTemplate ; 
  7.     @Resource 
  8.     private UsersService usersService ; 
  9.      
  10.     @PostMapping("/pay"
  11.     public Object pay(Long id, BigDecimal money) throws Exception { 
  12.         HttpHeaders headers = new HttpHeaders() ; 
  13.         headers.setContentType(MediaType.APPLICATION_JSON) ; 
  14.         String orderId = UUID.randomUUID().toString().replaceAll("-""") ; 
  15.         Map<String, String> params = new HashMap<>() ; 
  16.         params.put("accountId", String.valueOf(id)) ; 
  17.         params.put("orderId", orderId) ; 
  18.         params.put("money", money.toString()) ; 
  19.          
  20.         UsersLog usersLog = new UsersLog() ; 
  21.         usersLog.setCreateTime(new Date()) ; 
  22.         usersLog.setOrderId(orderId); 
  23.         usersLog.setMoney(money) ; 
  24.         usersLog.setStatus(0) ; 
  25.         usersService.saveLog(usersLog) ; 
  26.         HttpEntity<String> requestEntity = new HttpEntity<String>(new ObjectMapper().writeValueAsString(params), headers) ; 
  27.         return restTemplate.postForObject("http://localhost:8080/payInfos/pay", requestEntity, String.class) ; 
  28.     } 
  29.      

以上是兩個子模塊的所有代碼了

測試

初始數據

賬戶子模塊控制臺

支付子模塊控制臺

數據表數據

完畢!!!

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-08-30 08:33:07

RabbitMQSpringBoot消息信息

2024-06-11 13:50:43

2022-06-27 08:21:05

Seata分布式事務微服務

2022-06-21 08:27:22

Seata分布式事務

2017-07-26 15:08:05

大數據分布式事務

2019-10-10 09:16:34

Zookeeper架構分布式

2009-06-19 15:28:31

JDBC分布式事務

2009-09-18 15:10:13

分布式事務LINQ TO SQL

2021-09-29 09:07:37

分布式架構系統

2025-04-29 04:00:00

分布式事務事務消息

2019-06-26 09:41:44

分布式事務微服務

2022-03-24 07:51:27

seata分布式事務Java

2025-05-15 08:05:00

2021-08-06 08:33:27

Springboot分布式Seata

2022-12-19 19:12:17

分布式事務

2020-03-31 08:05:23

分布式開發技術

2018-10-28 17:54:00

分布式事務數據

2023-09-11 15:40:43

鍵值存儲云服務

2023-12-26 08:59:52

分布式場景事務機制

2022-01-26 13:46:40

分布式事務集合,這
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久毛片大屁完整版| 日韩精品一级| 亚洲欧美在线视频观看| 51国产成人精品午夜福中文下载| 精品无码av在线| 日韩av中文字幕一区| 欧美亚洲国产怡红院影院| 强伦女教师2:伦理在线观看| 欧美 日韩 综合| 日本免费新一区视频| 欧美高清视频一区二区| 美女洗澡无遮挡| 一区二区三区欧洲区| 欧美在线观看禁18| 亚洲国产精品无码观看久久| 午夜免费视频在线国产| 成人激情免费电影网址| 91精品国产综合久久香蕉最新版 | 午夜精品福利视频网站| 亚洲欧洲日夜超级视频| 五月婷婷深深爱| 国产精品自拍av| 国产精品成人国产乱一区| 久久久久无码国产精品| 日韩精品水蜜桃| 日韩精品高清在线| 久久久久无码国产精品一区李宗瑞| 电影亚洲一区| 婷婷亚洲久悠悠色悠在线播放| 亚洲第一精品区| 福利成人在线观看| 91蜜桃在线免费视频| 风间由美久久久| 国产精品色综合| 久久精品国产精品亚洲精品| 日本午夜人人精品| 日韩黄色一级大片| 亚洲国内自拍| 97色在线观看| 久久精品这里只有精品| 国产精品99久久久久久动医院| 亚洲性视频网站| 手机av免费看| 综合亚洲色图| 亚洲国产精品电影| 你懂的在线观看网站| 一区二区三区在线免费看| 欧美一区二区久久| 中文字幕视频三区| 91亚洲精品在看在线观看高清| 欧美影院一区二区| www.99在线| 欧美另类激情| 欧美另类高清zo欧美| 911福利视频| 香蕉久久一区| 69av一区二区三区| 性生活在线视频| 欧美三级一区| 亚洲电影在线看| 亚洲第九十七页| 免费精品国产| 这里精品视频免费| 日韩在线一卡二卡| 欧美日韩中文| 欧美日韩爱爱视频| 永久免费看片在线播放| 久久久国产亚洲精品| 日韩免费不卡av| 中文字幕制服诱惑| 国产精品资源在线看| 国产精品国产三级国产专区53| 黑人乱码一区二区三区av| 99精品偷自拍| 日本欧洲国产一区二区| 老司机午夜在线视频| 亚洲精品国产成人久久av盗摄| 国产免费裸体视频| 成人短视频app| 欧美天堂亚洲电影院在线播放| 亚洲欧美日本一区二区三区| 成人自拍在线| 亚洲人成人99网站| 久草手机视频在线观看| 亚洲性感美女99在线| 欧美在线影院在线视频| 中文字幕激情视频| 国产精品夜夜爽| 欧美另类一区| www.欧美日本韩国| 天天av天天翘天天综合网| 欧美黑人又粗又大又爽免费| 国产精品成人3p一区二区三区| 亚洲成年人在线播放| 丁香激情五月少妇| 狠狠综合久久av一区二区老牛| 欧美最顶级的aⅴ艳星| 国产精品视频第一页| 91在线精品一区二区三区| 亚洲图片小说在线| 国产夫妻在线播放| 欧美久久久久久蜜桃| 亚洲国产精品自拍视频| 久久综合国产| 欧洲精品久久久| 国产日韩一级片| 久久精品水蜜桃av综合天堂| 精品视频在线观看一区二区| av在线播放一区| 亚洲成人网av| 国产精品丝袜一区二区| 另类图片国产| 国产精品国产精品| 免费av网站在线观看| 色综合久久天天| 国产高潮失禁喷水爽到抽搐| 99精品在线观看| 日韩av电影国产| 国产 日韩 欧美 精品| 中文字幕一区三区| 丁香婷婷激情网| 香蕉久久精品| 午夜欧美大片免费观看| www.日本在线观看| ●精品国产综合乱码久久久久 | 欧美88888| 麻豆91精品| 九九99久久| 第一av在线| 日韩欧美精品三级| av成人免费网站| 久久精品国产精品亚洲综合| 日韩欧美在线电影| 日韩免费va| 亚洲欧美国产精品专区久久| 日韩久久久久久久久| 国产精品18久久久| 强开小嫩苞一区二区三区网站| 国产亚洲精彩久久| 一区二区日韩精品| 无码人妻精品一区二| 久久亚洲二区三区| 妺妺窝人体色www在线小说| 北条麻妃在线一区二区免费播放 | 午夜一区二区三区| 久久天堂av| 国产一区二区免费| 中文字幕激情视频| 综合激情成人伊人| 亚洲一级片免费观看| 亚洲成人日韩| 7777精品久久久大香线蕉小说| 久久精品视频观看| 日韩欧美国产wwwww| 九九视频在线免费观看| 成人综合在线观看| a√天堂在线观看| 亚洲图区在线| 国产精品户外野外| 在线免费看av| 在线播放中文一区| 2018天天弄| 成人精品免费看| 午夜a成v人精品| www.xxx亚洲| 婷婷伊人综合| 99中文视频在线| 国产伦子伦对白在线播放观看| 日韩精品免费视频| 91丨九色丨海角社区| 一色桃子久久精品亚洲| 性高潮久久久久久| 国产视频一区在线观看一区免费| 女人一区二区三区| 国产精品久久久久久妇女| 日韩一级黄色av| 亚洲乱色熟女一区二区三区| 亚洲制服欧美中文字幕中文字幕| 国产污在线观看| 久色成人在线| 吴梦梦av在线| 久久综合另类图片小说| 国产精品美女久久久免费| 成人免费网址| 精品中文字幕久久久久久| 中文亚洲av片在线观看| 一级女性全黄久久生活片免费| 亚洲做受高潮无遮挡| 国产在线一区二区综合免费视频| 六月婷婷在线视频| 日韩精品永久网址| 都市激情久久久久久久久久久| 欧美xxxxxx| 色与欲影视天天看综合网| 欧美伦理影视网| 日韩色在线观看| 男人天堂av在线播放| 亚洲色欲色欲www在线观看| 国产又粗又长又爽| 激情综合网av| 六月丁香婷婷激情| 欧美freesex交免费视频| 久久久久天天天天| 精品视频一区二区三区| 国产99久久精品一区二区| 蜜桃传媒在线观看免费进入 | 成人免费在线| 中文字幕亚洲综合久久筱田步美 | 色偷偷噜噜噜亚洲男人的天堂| 成人午夜免费在线观看| 欧美日韩视频在线一区二区| 国产女同在线观看| 亚洲一区在线观看网站| 极品蜜桃臀肥臀-x88av| 91亚洲午夜精品久久久久久| 欧美熟妇另类久久久久久多毛| 日韩精品每日更新| 麻豆tv在线播放| 欧美久久成人| 伊人久久av导航| av永久不卡| 欧美国产综合视频| 天堂综合网久久| 国产精品国产一区二区| 亚洲精品在线国产| 91久久国产综合久久91精品网站| 欧美性理论片在线观看片免费| 国产69精品99久久久久久宅男| 成人福利片网站| 中文字幕无线精品亚洲乱码一区 | 亚洲天堂偷拍| 午夜久久久久久久久久久| 久久社区一区| 亚洲精品国产精品国自产| 欧美人与拘性视交免费看| 精品视频第一区| 国产精品久久久久久久久久白浆| 亚洲综合社区网| 久久久久毛片免费观看| 亚洲va男人天堂| 精品一区二区三区中文字幕视频| 国产精品一区二区三区在线播放| 日韩漫画puputoon| 国产精品美乳在线观看| 巨胸喷奶水www久久久| 国产精品久久在线观看| 成人福利片在线| 国产精品视频久久久久| 色婷婷成人网| 亚洲影院色无极综合| 麻豆精品在线| 国产精品对白刺激久久久| 国产乱人伦丫前精品视频| 国产精品一区二区不卡视频| 免费看成人人体视频| 欧美日韩精品免费看| 精品国产乱码久久久久久果冻传媒 | 久久久九九九九| 一级特黄曰皮片视频| 中文字幕制服丝袜一区二区三区 | 91免费欧美精品| 77成人影视| 国产一区自拍视频| 自拍视频一区| 亚洲一一在线| 国内精品亚洲| 少妇性饥渴无码a区免费| 日韩电影免费在线| 日韩欧美中文在线视频| 91污片在线观看| 日韩影视一区二区三区| 亚洲精选视频在线| 国产午夜在线播放| 精品视频一区 二区 三区| 国产手机精品视频| 日韩av在线影院| 888av在线| 久久理论片午夜琪琪电影网| 深夜成人福利| 亚洲tv在线观看| 日韩中出av| 一区中文字幕在线观看| 亚洲伊人网站| 成人亚洲免费视频| 91网上在线视频| 精品女人久久久| 偷窥国产亚洲免费视频| 亚洲高清在线看| 日韩精品一区二区三区中文不卡| 你懂的在线免费观看| 日韩性生活视频| 中文字幕资源网在线观看免费| 国产精品专区一| 日韩美脚连裤袜丝袜在线| 亚洲人久久久| 99国产一区| 亚洲精品mv在线观看| 久久综合资源网| 欧美日韩综合一区二区| 色综合天天在线| 国产情侣激情自拍| 国产午夜精品全部视频在线播放| 在线中文免费视频| 国产精彩精品视频| 韩国精品福利一区二区三区 | aaaaa一级片| 亚洲黄色片在线观看| 中文字幕在线日亚洲9| 日韩高清有码在线| 日韩精品卡一| 国产日本欧美一区| 国产成人1区| 成 年 人 黄 色 大 片大 全| 激情图片小说一区| 久久婷婷五月综合| 日韩欧美在线第一页| 丰满人妻一区二区| 欧美xxxx做受欧美.88| 国产原创一区| 日本一区二区三区视频免费看| 精品成人在线| 色哟哟免费视频| 亚洲视频一区二区在线| 在线观看国产精品视频| 亚洲人a成www在线影院| 国产粉嫩在线观看| 激情五月综合色婷婷一区二区| 国产精品v日韩精品v欧美精品网站| 四季av一区二区三区| 日本一二三不卡| 91丨九色丨海角社区| 亚洲一品av免费观看| 波多视频一区| 欧美高清一区二区| 久久午夜av| 中文字幕免费高清| 91福利社在线观看| 男女污污视频在线观看| 555www成人网| 亚洲素人在线| 人妻内射一区二区在线视频| 久久先锋资源网| 一二三区免费视频| 亚洲色图13p| 国产精品伦一区二区| 亚洲一区二区四区| 国产资源在线一区| 欧美成人黄色网| 精品成a人在线观看| av2020不卡| 国模一区二区三区私拍视频| 99视频精品| 精品人妻无码一区| 欧美日韩美女一区二区| 精品国产99久久久久久| 亚洲一区二区久久久久久久| 欧美精品国产| 日本免费福利视频| 在线一区二区观看| 男人的天堂在线视频免费观看| 91色视频在线导航| 伊人影院久久| 手机av免费看| 88在线观看91蜜桃国自产| 亚洲丝袜精品| 久久国产一区二区| 日韩av一二三| 久久中文免费视频| 亚洲二区在线播放视频| 色豆豆成人网| 成人污网站在线观看| 99re6这里只有精品视频在线观看| 国产嫩bbwbbw高潮| 精品国产美女在线| 久久视频在线观看| 亚洲成人福利在线观看| 一区二区视频在线| 日本一区高清| 91九色视频导航| 久久成人免费| 51精品免费网站| 亚洲精品ady| 日韩成人一区| 欧美日韩亚洲一| 国产精品麻豆99久久久久久| 亚洲第一色网站| 国产精品高清免费在线观看| 午夜精品免费| 欧洲美熟女乱又伦| 欧美α欧美αv大片| 成人久久网站| 久久综合九色综合88i| 中文字幕五月欧美| 熟妇人妻av无码一区二区三区| 国产精品偷伦免费视频观看的| 激情久久一区| 日韩三级在线观看视频| 亚洲人成电影网站色…| 伊人精品综合| 亚洲最大天堂网|