2016-12-30 15 views
0

Я использую AWS SQS в первый раз. Я работаю в определенной компании, которая блокирует нас через брандмауэр для подключения из нашей локальной сети к SQS по некоторым причинам, не зависящим от меня. Я могу загрузить все, что я разработал для нашего TomCat в AWS, или даже запустить через нашу командную строку Linux с нашим ec2-пользователем (загрузка через WinSCP и запуск через Putty).Почему ElastiMq продолжает запрашивать сервер и проверять параметры, так как я передаю его

Поскольку мне нужно предоставить определенное решение, используя sqs, но я не могу отлаживать доступ к нему из своего Eclipse, мне интересно, чтобы издеваться над sqs. Кроме того, я вижу преимущества такого подхода с точки зрения тестирования. Тем не менее, после нескольких часов поиска я нашел именно то, что мне нужно: http://www.schibsted.pl/blog/mocking-amazon-sqs-with-elasticmq/

Я загрузил пример (https://github.com/JanGurda/elastc-mq-rule-sample), но я не могу его запустить. Я понимаю, что есть эластичная обложка, которая должна быть запущена вместе с такой банкой. Я попробовал другой способ, загрузив эластичный инструмент и начал его перед запуском образца, но я все равно получаю тот же результат.

В принципе, я получаю этот выход

usage: java -jar project.jar [-h] [-v] {server,check} ... 

positional arguments: 
    {server,check}   available commands 

optional arguments: 
    -h, --help    show this help message and exit 
    -v, --version   show the application version and exit 

Кажется, что я делаю что-то очень глупо, но я не нашел на север. PS. Я проверил, и у жома есть ломбок и эластик.

ПОМ

<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"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>pl.schibsted.spid</groupId> 
    <artifactId>elastc-mq-rule-sample</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>io.dropwizard</groupId> 
      <artifactId>dropwizard-core</artifactId> 
      <version>0.8.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.amazonaws</groupId> 
      <artifactId>aws-java-sdk-sqs</artifactId> 
      <version>1.10.1</version> 
     </dependency> 
     <dependency> 
      <groupId>io.dropwizard</groupId> 
      <artifactId>dropwizard-testing</artifactId> 
      <version>0.8.0</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.elasticmq</groupId> 
      <artifactId>elasticmq-rest-sqs_2.11</artifactId> 
      <version>0.8.7</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.projectlombok</groupId> 
      <artifactId>lombok</artifactId> 
      <version>1.16.0</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>2.3</version> 
       <configuration> 
        <createDependencyReducedPom>true</createDependencyReducedPom> 
        <filters> 
         <filter> 
          <artifact>*:*</artifact> 
          <excludes> 
           <exclude>META-INF/*.SF</exclude> 
           <exclude>META-INF/*.DSA</exclude> 
           <exclude>META-INF/*.RSA</exclude> 
          </excludes> 
         </filter> 
        </filters> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <transformers> 
           <transformer 
            implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" /> 
           <transformer 
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
            <mainClass>pl.schibsted.spid.elasticmq.server.ElasticMqRuleSampleApplication</mainClass> 
           </transformer> 
          </transformers> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-failsafe-plugin</artifactId> 
       <version>2.18.1</version> 
       <configuration> 
        <includes> 
         <include>**/ITest*.java</include> 
        </includes> 
       </configuration> 
       <executions> 
        <execution> 
         <id>integration-tests</id> 
         <goals> 
          <goal>integration-test</goal> 
          <goal>verify</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.3</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

DropwizardAppRule:

public class ITestPingResource { 

    @ClassRule 
    public static DropwizardAppRule<ElasticMqRuleSampleApplicationConfiguration> app = 
      new DropwizardAppRule<>(ElasticMqRuleSampleApplication.class, 
        ITestPingResource.class.getClassLoader().getResource("test.yml").getPath()); 

    @ClassRule 
    public static SqsRule sqs = new SqsRule(SqsRuleConfiguration.builder() 
      .queue("sample-queue").port(8888).build()); 

    private Client client = ClientBuilder.newClient(); 

    @After 
    public void tearDown() { 
     sqs.purgeAllQueues(); 
    } 

    @Test 
    public void shouldPublishProcessedRequestPayload() throws Exception { 
     // given 
     String toSend = "abcdefgh"; 
     // when 
     Response response = client 
       .target("http://127.0.0.1:" + app.getLocalPort() + "/ping") 
       .request().post(Entity.json(toSend)); 
     // then 
     assertEquals(Status.NO_CONTENT.getStatusCode(), response.getStatus()); 
     List<Message> messagesFromQueue = sqs.getQueue("sample-queue").read(10); 
     assertEquals(1, messagesFromQueue.size()); 
     assertEquals("ABCDEFGH", messagesFromQueue.get(0).getBody()); 
    } 
} 

test.yml

queueUrl: http://localhost:8888/queue/sample-queue 
awsAccessKey: x 
awsSecretKey: x 

главная:

public class ElasticMqRuleSampleApplication extends Application<ElasticMqRuleSampleApplicationConfiguration> { 

    public static void main(String[] args) throws Exception { 
     new ElasticMqRuleSampleApplication().run(args); 
    } 

    @Override 
    public void run(ElasticMqRuleSampleApplicationConfiguration configuration, Environment environment) throws Exception { 
     PingResource resource = new PingResource(configuration); 
     environment.jersey().register(resource); 
    } 

} 

ответ

1

Demetrio,

Ошибка, которую вы получаете, - это просто стандартный вывод Dropwizard. Вы должны использовать параметр «server», чтобы запустить приложение Dropwizard. Таким образом, команда, которую вы используете для запуска Dropwizard, - java -jar <> server.

Если вы, однако, хотите запустить тест интеграции с интеграцией (который я обсуждал в своей статье), просто используйте Maven. Тип mvn clean install. Он будет строить проект и запускать интеграционный тест.

С благодарностью