Activemq 消息服务

1、简介

ActiveMQ 自己看百科

2、下载安装

 去 apache 官网下载,http://archive.apache.org/dist/activemq/ 

3、安装

a、解压

tar -xvf apache-activemq-5.14.4-bin.tar.gz

 b、拷贝到/usr/local下

mv apache-activemq-5.14.4 /usr/local/activemq

 c、启动

bin/activemq start

 d、启动后可以通过8161端口访问

http://10.0.0.12:8161

 e、设置访问账号密码:

在 conf/activemq.xml 中的 broker 节点中加入如下代码,设置消息的发送接收账号密码:

<plugins>
  <simpleAuthenticationPlugin>
      <users>
                           <authenticationUser username="manager" password="123456" groups="users,admins"/>
      </users>
   </simpleAuthenticationPlugin>
 </plugins>

 在 conf/jetty.xml 文件中找到bean 的name为 securityConstraint的修改为如下内容:

   <bean id="securityConstraint" class="org.eclipse.jetty.util.security.Constraint">
        <property name="name" value="BASIC" />
        <property name="roles" value="admin" />
        <property name="authenticate" value="true" />
    </bean>

 在文件conf/jetty-realm.properties中设置网页登录的账号密码

# 账号: 密码,[角色,角色]
admin: 123456, admin

 设置完成后,打开d步骤的地址,提示输入会提示输入账号密码

4、Activemq持久化到mysql数据库

修改配置文件conf/activemq.xml,找到 persistenceAdapter 节点,修改为如下内容

 <persistenceAdapter>
          <jdbcPersistenceAdapter   dataSource="#mysql-ds"/>
      </persistenceAdapter>

 在该文件的beans节点加如下配置  就是spring xml方式配置一个 数据库链接

 <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql://127.0.0.1/test"/>
      <property name="username" value="root"/>
      <property name="password" value="123456"/>
      <property name="maxActive" value="200"/>
      <property name="poolPreparedStatements" value="true"/>
     </bean>

 5、java代码链接

	protected ActiveMQConnectionFactory connectionFactory =
			new  ActiveMQConnectionFactory("manager" , "123456" , "tcp://10.0.0.12:61616"); 
	
	@Test
	public void testSend()throws Exception{ 
		try {
			Connection conn = connectionFactory.createConnection();
			conn.start();
			Session session = conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
			Queue destination = session.createQueue("FirstQueue");
			MessageProducer producer = session.createProducer(destination);
			producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
			for(int x=0;x<10;x++){
				TextMessage textMessage = session.createTextMessage("ActiveMq 发送的消息" + x); 
				producer.send( textMessage ); 
				session.commit();
			}
			conn.close();
		} catch (Exception e) {
			e.printStackTrace(); 
		}
	}
	@Test
	public void testReceiver()throws Exception{
		Connection conn = connectionFactory.createConnection();
		conn.start();
		Session session = conn.createSession(Boolean.FALSE,
                Session.AUTO_ACKNOWLEDGE);
		Queue destination = session.createQueue("FirstQueue");
		MessageConsumer consumer = session.createConsumer(destination); 
		
		 while (true) {
             //设置接收者接收消息的时间,为了便于测试,这里谁定为100s
             TextMessage message = (TextMessage) consumer.receive(100000);
             if (null != message) {
                 System.out.println("收到消息" + message.getText());
             } else {
                 break;
             }
         }
	}

a、在application.properties文件中加入activemq的配置

spring.activemq.user=manager
spring.activemq.password=123456
spring.activemq.brokerUrl=tcp://10.0.0.12:61616

  

b、spring boot + activemq 创建监听类

import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

public class ConsumerMessageListener implements MessageListener {

	@Override
	public void onMessage(Message message) {
		
		TextMessage textMessage = (TextMessage) message;
		
		try {
			System.out.println( textMessage.getText());
		} catch (Exception e) {
			e.printStackTrace(); 
		}
		
	}
	
}

 定义bean DefaultMessageListenerContainer

	@Bean
	@Autowired
	public DefaultMessageListenerContainer container(ConnectionFactory connectionFactory
			){
		DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
		container.setConnectionFactory(connectionFactory);
		container.setDestination(new ActiveMQQueue("default_queue")); 
		container.setMessageListener(new ConsumerMessageListener()); 
		container.setConcurrentConsumers(2);
		container.setConcurrency( "2-5" );
		return container ;
	}

 使用JmsTemplate发送消息

@Autowired
	private JmsTemplate jmsTemplate;


Map<String, Object> map = new HashMap<String, Object>();
map.put("userid", "1");
map.put("username", "admin");
final String mapStr = JSON.toJSONString(map); 
jmsTemplate.send(destination, new MessageCreator() {
@Override
  public Message createMessage(Session session) throws JMSException {
    TextMessage textMessage = session.createTextMessage(mapStr);
    return textMessage;
  }
});

c、发布topic

ActiveMQTopic activeMQTopic = new ActiveMQTopic("topic001");
		    
		    jmsTemplate.send(activeMQTopic, new MessageCreator(){
		    	@Override
		    	public Message createMessage(Session session) throws JMSException {
		    		 return session.createTextMessage("你好");
		    	}
		    });

 d、订阅topic

@Bean
	@Autowired
	public DefaultMessageListenerContainer container2(ConnectionFactory connectionFactory
			){
		DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
		container.setConnectionFactory(connectionFactory);
		container.setDestination(new ActiveMQTopic("topic001")); 
		container.setMessageListener(new ConsumerMessageListener()); 
		container.setConcurrentConsumers(1);
		container.setConcurrency( "1" );
		return container ;
	}

猜你喜欢

转载自hpgary.iteye.com/blog/2369124