// Path: jms-base/src/main/java/me/chanjar/jms/base/sender/JmsMessageSender.java
// public interface JmsMessageSender {
// 
//   /**
//    * 发送Jms消息
//    *
//    * @param payload 消息主体
//    * @throws JMSException
//    */
//   void sendMessage(MessageDto payload) throws JMSException;
// 
// }
// 
// Path: jms-msg/src/main/java/me/chanjar/jms/msg/RequestDto.java
// public class RequestDto extends MessageDto {
// 
//   private static final long serialVersionUID = 5515305970509119810L;
//   /**
//    * 商品ID
//    */
//   private final Long itemId;
// 
//   /**
//    * 用户ID
//    */
//   private final String userId;
// 
//   public RequestDto(Long itemId, String userId) {
//     super();
//     this.itemId = itemId;
//     this.userId = userId;
//   }
// 
//   public Long getItemId() {
//     return itemId;
//   }
// 
//   public String getUserId() {
//     return userId;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     RequestDto that = (RequestDto) o;
// 
//     if (itemId != null ? !itemId.equals(that.itemId) : that.itemId != null) return false;
//     return userId != null ? userId.equals(that.userId) : that.userId == null;
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = itemId != null ? itemId.hashCode() : 0;
//     result = 31 * result + (userId != null ? userId.hashCode() : 0);
//     return result;
//   }
// 
//   @Override
//   public String toString() {
//     return new ToStringBuilder(this)
//         .append("id", id)
//         .append("itemId", itemId)
//         .append("userId", userId)
//         .toString();
//   }
// }
// 
// Path: jms-msg/src/main/java/me/chanjar/jms/msg/ResponseDto.java
// public class ResponseDto extends MessageDto {
// 
//   private static final long serialVersionUID = -4690648814874030736L;
//   /**
//    * 关联的RequestDto的id
//    */
//   private final String requestId;
// 
//   /**
//    * 错误消息
//    */
//   protected String errorMessage;
// 
//   /**
//    * 是否成功处理请求
//    */
//   protected boolean success;
// 
//   public ResponseDto(String requestId) {
//     super();
//     this.requestId = requestId;
//   }
// 
//   public String getRequestId() {
//     return requestId;
//   }
// 
//   public String getErrorMessage() {
//     return errorMessage;
//   }
// 
//   public void setErrorMessage(String errorMessage) {
//     this.errorMessage = errorMessage;
//   }
// 
//   public boolean isSuccess() {
//     return success;
//   }
// 
//   public void setSuccess(boolean success) {
//     this.success = success;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     ResponseDto that = (ResponseDto) o;
// 
//     if (success != that.success) return false;
//     if (requestId != null ? !requestId.equals(that.requestId) : that.requestId != null) return false;
//     return errorMessage != null ? errorMessage.equals(that.errorMessage) : that.errorMessage == null;
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = requestId != null ? requestId.hashCode() : 0;
//     result = 31 * result + (errorMessage != null ? errorMessage.hashCode() : 0);
//     result = 31 * result + (success ? 1 : 0);
//     return result;
//   }
// }


import me.chanjar.jms.base.sender.JmsMessageSender;
import me.chanjar.jms.msg.RequestDto;
import me.chanjar.jms.msg.ResponseDto;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;
package me.chanjar.jms.client.command;



@Component
public class MiaoShaCommandServiceImpl implements MiaoShaCommandService {

  private static final Logger LOGGER = LoggerFactory.getLogger(MiaoShaCommandService.class);

  private ResponseCache responseCache;

  private JmsMessageSender jmsMessageSender;

  @Override
  public String doRequest(RequestDto requestDto) {
    try {
      jmsMessageSender.sendMessage(requestDto);
      return requestDto.getId();
    } catch (JMSException e) {
      LOGGER.error(ExceptionUtils.getStackTrace(e));
      throw new RuntimeException(e);
    }
  }

  @Override
  public ResponseDto getResponse(String requestId) {
    return responseCache.getAndRemove(requestId);
  }

  @Autowired
  public void setResponseCache(ResponseCache responseCache) {
    this.responseCache = responseCache;
  }

  @Autowired
  @Qualifier("requestMessageSender")
// Path: jms-base/src/main/java/me/chanjar/jms/base/sender/JmsMessageSender.java
// public interface JmsMessageSender {
// 
//   /**
//    * 发送Jms消息
//    *
//    * @param payload 消息主体
//    * @throws JMSException
//    */
//   void sendMessage(MessageDto payload) throws JMSException;
// 
// }
// 
// Path: jms-msg/src/main/java/me/chanjar/jms/msg/RequestDto.java
// public class RequestDto extends MessageDto {
// 
//   private static final long serialVersionUID = 5515305970509119810L;
//   /**
//    * 商品ID
//    */
//   private final Long itemId;
// 
//   /**
//    * 用户ID
//    */
//   private final String userId;
// 
//   public RequestDto(Long itemId, String userId) {
//     super();
//     this.itemId = itemId;
//     this.userId = userId;
//   }
// 
//   public Long getItemId() {
//     return itemId;
//   }
// 
//   public String getUserId() {
//     return userId;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     RequestDto that = (RequestDto) o;
// 
//     if (itemId != null ? !itemId.equals(that.itemId) : that.itemId != null) return false;
//     return userId != null ? userId.equals(that.userId) : that.userId == null;
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = itemId != null ? itemId.hashCode() : 0;
//     result = 31 * result + (userId != null ? userId.hashCode() : 0);
//     return result;
//   }
// 
//   @Override
//   public String toString() {
//     return new ToStringBuilder(this)
//         .append("id", id)
//         .append("itemId", itemId)
//         .append("userId", userId)
//         .toString();
//   }
// }
// 
// Path: jms-msg/src/main/java/me/chanjar/jms/msg/ResponseDto.java
// public class ResponseDto extends MessageDto {
// 
//   private static final long serialVersionUID = -4690648814874030736L;
//   /**
//    * 关联的RequestDto的id
//    */
//   private final String requestId;
// 
//   /**
//    * 错误消息
//    */
//   protected String errorMessage;
// 
//   /**
//    * 是否成功处理请求
//    */
//   protected boolean success;
// 
//   public ResponseDto(String requestId) {
//     super();
//     this.requestId = requestId;
//   }
// 
//   public String getRequestId() {
//     return requestId;
//   }
// 
//   public String getErrorMessage() {
//     return errorMessage;
//   }
// 
//   public void setErrorMessage(String errorMessage) {
//     this.errorMessage = errorMessage;
//   }
// 
//   public boolean isSuccess() {
//     return success;
//   }
// 
//   public void setSuccess(boolean success) {
//     this.success = success;
//   }
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) return true;
//     if (o == null || getClass() != o.getClass()) return false;
// 
//     ResponseDto that = (ResponseDto) o;
// 
//     if (success != that.success) return false;
//     if (requestId != null ? !requestId.equals(that.requestId) : that.requestId != null) return false;
//     return errorMessage != null ? errorMessage.equals(that.errorMessage) : that.errorMessage == null;
//   }
// 
//   @Override
//   public int hashCode() {
//     int result = requestId != null ? requestId.hashCode() : 0;
//     result = 31 * result + (errorMessage != null ? errorMessage.hashCode() : 0);
//     result = 31 * result + (success ? 1 : 0);
//     return result;
//   }
// }


// Path: jms-client/src/main/java/me/chanjar/jms/client/command/MiaoShaCommandServiceImpl.java
import me.chanjar.jms.base.sender.JmsMessageSender;
import me.chanjar.jms.msg.RequestDto;
import me.chanjar.jms.msg.ResponseDto;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import javax.jms.JMSException;

package me.chanjar.jms.client.command;



@Component
public class MiaoShaCommandServiceImpl implements MiaoShaCommandService {

  private static final Logger LOGGER = LoggerFactory.getLogger(MiaoShaCommandService.class);

  private ResponseCache responseCache;

  private JmsMessageSender jmsMessageSender;

  @Override
  public String doRequest(RequestDto requestDto) {
    try {
      jmsMessageSender.sendMessage(requestDto);
      return requestDto.getId();
    } catch (JMSException e) {
      LOGGER.error(ExceptionUtils.getStackTrace(e));
      throw new RuntimeException(e);
    }
  }

  @Override
  public ResponseDto getResponse(String requestId) {
    return responseCache.getAndRemove(requestId);
  }

  @Autowired
  public void setResponseCache(ResponseCache responseCache) {
    this.responseCache = responseCache;
  }

  @Autowired
  @Qualifier("requestMessageSender")
  public void setJmsMessageSender(JmsMessageSender jmsMessageSender) {