从零创建 Springboot RabbitMQ

本文使用IDEA编辑器,首先打开编辑器,并新建maven项目springbootrmqp,这里直接点 NEXT 即可,然后填写groupid artifactid 创建项目完成后,在pom.xlm文件里做初始化Maven项目配置,并引入相关依赖

4.0.0

<groupId>cn.duanzx</groupId>
<artifactId>rabbitmq</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <argLine>-Dfile.encoding=UTF-8</argLine>
    <java.version>1.8</java.version>
    <maven.test.skip>true</maven.test.skip>
</properties>
<build>
    <defaultGoal>clean install</defaultGoal>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.0.0</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

配置完成后在src/main/java包里创建初始化函数Application后,加上SpringBootApplication注解 此时运行Application Main函数会报错,因为Springboot默认会自动化允许数据源管理配置,如果找不到相关数据源配置文件的话会报错,解决如下

@SpringBootApplication

@ComponentScan(basePackages = {"rabbitmq.sample"})

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class ,HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class}) public class ApplicationSample {

public static void main(String[] args)throws InterruptedException {
    SpringApplication.run(ApplicationSample.class, args);
}

} 取消数据源自动配置后,就可以自定义加入多个数据源了 以下是多数据源以及Springboot事物控制的配置:当前项目中并没有用到。

@Configuration

@EnableTransactionManagement(proxyTargetClass = true)

@ImportResource(locations = {"classpath:conf/admin-data-source.xml"}) public class JpaConfiguration { @Bean("jpaProperties")

public Properties jpaProperties() { Properties jpaProperties = new Properties(); jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect"); jpaProperties.put("hibernate.show_sql", true); jpaProperties.put("hibernate.format_sql", false); // jpaProperties.put("hibernate.hbm2ddl.auto", false); jpaProperties.put("hibernate.jdbc.batch_size", 500); jpaProperties.put("hibernate.cache.use_second_level_cache", false); jpaProperties.put("hibernate.temp.use_jdbc_metadata_defaults", false); jpaProperties.put("hibernate.current_session_context_class", SpringSessionContext.class); return jpaProperties; }

@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
    return new PersistenceExceptionTranslationPostProcessor();
}

}

@Configuration

@EnableTransactionManagement

@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactory", transactionManagerRef = "transactionManager", basePackages = {"admin.domain"})

public class CoreJpaConfiguration {

@Autowired @Qualifier("dataSource") private DataSource dataSource;

@Autowired @Qualifier("jpaProperties") private Properties jpaProperties;

@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
    factoryBean.setDataSource(dataSource);
    factoryBean.setJpaProperties(jpaProperties);
    JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    factoryBean.setJpaVendorAdapter(vendorAdapter);
    factoryBean.setPackagesToScan("admin.domain");
    return factoryBean;
}

@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager() {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
    return transactionManager;
}

}

此时一个完整的Springboot项目就已经建立了,然后需要建立RabbitMQ访问 新创建application.yam文件,并添加如下内容,用户名和密码要在rabbitServer Web管理端创建,密码不要包含关键字如:admin等等 spring:

 rabbitmq:

  host: localhost

  port: 5672

  username: admin

  password: 12345

然后创建发送消息类,接收消息类

@SpringBootApplication

@ComponentScan(basePackages = {"rabbitmq.normal"})

@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class ,HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class}) public class ApplicationNormal {

public static String topicExchangeName = "spring-boot-exchange";

public static String queueName = "Spring-boot";

@Bean
Queue queue(){
    return new Queue(queueName,false);
}

@Bean
TopicExchange exchange(){
    return new TopicExchange(topicExchangeName);
}

@Bean
Binding binding(Queue queue,TopicExchange exchange){
    return BindingBuilder.bind(queue).to(exchange).with("foo.bar.#");
}

@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,MessageListenerAdapter listenerAdapter){
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setQueueNames(queueName);
    container.setMessageListener(listenerAdapter);
    return container;
}

@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver){
    return new MessageListenerAdapter(receiver,"receiveMessage");
}

public static void main(String[] args)throws InterruptedException {
    SpringApplication.run(ApplicationNormal.class, args).close();
}

} @Component public class Receiver { private CountDownLatch latch = new CountDownLatch(1);

public void receiveMessage(String message) {
    System.out.println("Received <"+message+">");
    latch.countDown();
}

public CountDownLatch getLatch(){
    return latch;
}

} @Component public class Runner implements CommandLineRunner { private final RabbitTemplate rabbitTemplate;

private final Receiver receiver;

public Runner(Receiver receiver, RabbitTemplate rabbitTemplate) {
    this.receiver = receiver;
    this.rabbitTemplate = rabbitTemplate;
}

@Override
public void run(String... strings) throws Exception {
    System.out.println("Sending message....................");
    rabbitTemplate.convertAndSend(ApplicationNormal.topicExchangeName, "foo.bar.baz", "Hello from RabbitMQ!");
    receiver.getLatch().await(10000, TimeUnit.MILLISECONDS);
}

}

此时运行ApplicationNormal后,即可在控制台看到发送消息的内容,然后在RabbitMQ Web管理页面就好看到对应的信息了

猜你喜欢

转载自201409142037.iteye.com/blog/2415385
今日推荐