spring boot项目 和消息队列 activeMQ 的整合

前言:这篇文章 之前 有写关于 redis 整合 数据库整合的文章 帮助新人们快速入门springboot 项目 这些整合都是本人亲测,亲自实现的,希望能够帮到大家,话不多说 上代码

1.jar包下载

<dependency>  
                <groupId>org.springframework.boot</groupId>  
                <artifactId>spring-boot-starter-activemq</artifactId>  
             </dependency>  
	</dependencies>

2.yml 配置

 spring:
	 activemq:
	   broker-url : tcp://127.0.0.1:61616  
	   user: admin
	   password: admin
	   jms:
	   pub-sub-domain: true 
topicName: testTopic
queueName: testQueue

3.配置链接工厂

package online.example.development.config;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.Topic;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.example.demo.mqListen.MQListen;


@Configuration
public class ActiveMqConfig {
	
	@Value("${spring.activemq.broker-url}")
	private String brokerUrl;
	@Value("${spring.activemq.user}")
	private String userName;
	@Value("${spring.activemq.password}")
	private String password;
	@Value("${topicName}")
	private String topicName;
	@Value("${queueName}")
	private String queueName;
	@Autowired
	private MQListen mQListen;
	
	@Bean(name="activeMQConnectionFactory")
	public ActiveMQConnectionFactory getActiveMQFactiory() {
		ActiveMQConnectionFactory active=new ActiveMQConnectionFactory();
		active.setBrokerURL(brokerUrl);
		active.setUserName(userName);
		active.setPassword(password);
		active.setSendTimeout(1000);
		return active;
	}
	@Bean(name="messageConsumer")
	public MessageConsumer getConsumer(@Qualifier("activeMQConnectionFactory") ActiveMQConnectionFactory active) throws JMSException {
		
		Connection createConnection = active.createConnection();
		createConnection.start();
		Session session = createConnection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
		Destination destination = session.createTopic(topicName);
		MessageConsumer consumer = session.createConsumer(destination);
		mQListen.setSession(session);
    	consumer.setMessageListener(mQListen);
    	
    	System.err.println("mq消费者准备玩不");
		return consumer;
	}

}

4.配置生产者

package com.example.demo.mqListen;

import java.util.Enumeration;

import javax.annotation.Resource;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@RequestMapping("api")
public class Produce {
	
	@Resource(name="activeMQConnectionFactory")
	private ActiveMQConnectionFactory activeMQConnectionFactory;
	@Value("${topicName}")
	private String topicName;
	

	
	@ResponseBody
	@RequestMapping("rest")
	public void sendMessage() {
		
		try {
			Connection createConnection = activeMQConnectionFactory.createConnection();
			createConnection.start();
			Session session = createConnection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
			Destination destination=session.createTopic(topicName);
			MessageProducer producer=session.createProducer(destination);
			ObjectMessage createMessage = session.createObjectMessage();
			createMessage.setObject("1111");
			producer.send(createMessage);
			System.err.println("发送完毕");
			session.commit();
		} catch (JMSException e) {
			e.printStackTrace();
		}
		
	
		
	}
}

5.配置消费者

package com.example.demo.mqListen;

import java.io.Serializable;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.Session;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Component
public class MQListen implements MessageListener{

	
	private Session session;
	
	
	@Override
	public void onMessage(Message message) {
		ObjectMessage objMsg = (ObjectMessage) message;
		try {
			Serializable object = objMsg.getObject();
			System.err.println(object);
		} catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}
	public Session getSession() {
		return session;
	}
	public void setSession(Session session) {
		this.session = session;
	}
	
	
	
}

6.最后看打印结果 和activeMq终端是否有消费者消费消息

猜你喜欢

转载自blog.csdn.net/qq_41684939/article/details/87338202